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';
qlvxas9a1#
VCOUNT 你的名字在这里无关紧要;它是 DATE_CREATED 这就产生了问题。它的数据类型是什么?我希望是这样 DATE ,因为你只需要
VCOUNT
DATE_CREATED
DATE
where date_created between date '2020-05-01' and date '2020-05-31'
注意,我使用了日期文字;你用了弦。永远不要把日期和字符串比较,会出现各种各样的问题(你碰到了其中一个)。但是,如果 date_created 是 VARCHAR2 ,那么您就有了一个真正的问题,因为您首先必须将这些值转换为日期,如果不是所有数据都遵循相同的格式掩码,那么在修复之前,您将不得不付出代价(这就是为什么我说我希望你的问题是第一个)。
date_created
VARCHAR2
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')
2条答案
按热度按时间qlvxas9a1#
VCOUNT
你的名字在这里无关紧要;它是DATE_CREATED
这就产生了问题。它的数据类型是什么?我希望是这样DATE
,因为你只需要注意,我使用了日期文字;你用了弦。永远不要把日期和字符串比较,会出现各种各样的问题(你碰到了其中一个)。
但是,如果
date_created
是VARCHAR2
,那么您就有了一个真正的问题,因为您首先必须将这些值转换为日期,如果不是所有数据都遵循相同的格式掩码,那么在修复之前,您将不得不付出代价(这就是为什么我说我希望你的问题是第一个)。yyhrrdl82#
ora-01858是“在需要数字的地方找到的非数字字符”。
您将日期作为字符串文本提供,并指望它们与数据库的当前日期格式相匹配,这是一种很不可靠的做法。相反,您应该显式地将它们转换为日期: