我的SQL语句如下:delete from "result" where DATA_DATE < TO_DATE('2023-04-06 00:00:00', 'YYYY-MM-DD HH24-MI-SS')
错误消息为:ORA-01861: literal does not match format string
我该怎么办?
这是表中信息的一部分:enter image description here
我的SQL语句如下:delete from "result" where DATA_DATE < TO_DATE('2023-04-06 00:00:00', 'YYYY-MM-DD HH24-MI-SS')
错误消息为:ORA-01861: literal does not match format string
我该怎么办?
这是表中信息的一部分:enter image description here
1条答案
按热度按时间pjngdqdw1#
如果
DATA_DATE
列存储为DATE
数据类型:然后你的查询工作:
如果
DATA_DATE
列是字符串数据类型:然后您的查询:
正在将字符串与日期进行比较,Oracle将隐式地将字符串转换为日期,以便比较相同的数据类型,并且查询有效地:
如果
NLS_DATE_FORMAT
会话参数匹配:然后查询工作。
但如果会话参数不匹配:
然后你可能会得到错误:
要解决此问题,请执行以下操作:
1.始终将日期存储为
DATE
数据类型(而不是字符串)。NLS_DATE_FORMAT
以便隐式转换工作。而任何一种选择都会起作用;你应该使用#1并修复你的表,以便数据以正确的数据类型存储。如果你真的不能改变表,那么使用#2,并确保你的查询是比较相同的数据类型(如果需要,使用类型之间的显式转换)。选项#3只是为了完整性,它只会让你继续使用依赖隐式类型转换的坏习惯;别用它。
fiddle