在我的数据库中,我有一个日期列,当我尝试运行以下查询时,该列是varchar2格式的,我会得到ora -01847错误。
SELECT NVL(SUM(TOTAL_QOH),0)
FROM V_STOCK_ENQUIRY
WHERE LOCATION_ID = 82
AND TO_DATE(EXPIRY_DATE, 'DD-MM-YYYY')>= TO_DATE('01-11-2017', 'DD-MM-YYYY')
AND TO_DATE(EXPIRY_DATE, 'DD-MM-YYYY')<= TO_DATE('01-11-2017', 'DD-MM-YYYY')
但是,当我尝试运行相同的查询时,只需拿到total_qoh而不是总和,我就会正确。谁能帮我解决这个问题。
行的一部分可能不会导致错误,但是当您总和时,就会检查每个行并发生错误。检查您的数据,某处应该有错误的值,例如,您可以使用以下块代码。但是最好的选择是将列类型更改为date
。存储日期是因为Varchars会导致此类问题,并且很难构建查询等。
declare
dt date;
begin
for r in (select rowid, expiry_date from v_stock_enquiry) loop
begin
dt := to_date(r.expiry_date, 'dd-mm-yyyy');
exception when others then
if sqlcode in (-1839, -1847) then
dbms_output.put_line('value: '||r.expiry_date||' is not correct');
dbms_output.put_line('rowid: '||r.rowid);
dbms_output.put_line(sqlerrm);
else
dbms_output.put_line(sqlcode);
dbms_output.put_line(sqlerrm);
end if;
end;
end loop;
end;