在sql块中获取ora-01858

gijlo24d  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(256)
Vcount varchar(20);

Select count(*) into vcount
from base_sales_ordrer
where status_lkp='2' and date_created between '01-may-20' and '31-may-20';
qlvxas9a

qlvxas9a1#

VCOUNT 你的名字在这里无关紧要;它是 DATE_CREATED 这就产生了问题。它的数据类型是什么?我希望是这样 DATE ,因为你只需要

where date_created between date '2020-05-01' and date '2020-05-31'

注意,我使用了日期文字;你用了弦。永远不要把日期和字符串比较,会出现各种各样的问题(你碰到了其中一个)。
但是,如果 date_createdVARCHAR2 ,那么您就有了一个真正的问题,因为您首先必须将这些值转换为日期,如果不是所有数据都遵循相同的格式掩码,那么在修复之前,您将不得不付出代价(这就是为什么我说我希望你的问题是第一个)。

yyhrrdl8

yyhrrdl82#

ora-01858是“在需要数字的地方找到的非数字字符”。
您将日期作为字符串文本提供,并指望它们与数据库的当前日期格式相匹配,这是一种很不可靠的做法。相反,您应该显式地将它们转换为日期:

SELECT COUNT(*)
INTO   vcount
FROM   base_sales_ordrer
WHERE  status_lkp = '2' AND 
       date_created BETWEEN TO_DATE('01-may-20', 'DD-MON-YY') AND
                            TO_DATE('31-may-20', 'DD-MON-YY')

相关问题