ORA-01861:文字与Oracle中比较日期的格式字符串不匹配



我已将日期值分配到一个变量中,该变量为2017-03-15T00:00:00+05:30

我正在与其他值为TO_DATE('01-10-16', 'dd-mm-yy')的日期进行比较

这是我对同一的查询

IF TO_DATE(r.FINAL_SR_DATE, 'dd-mm-yy') >= TO_DATE('01-10-16', 'dd-mm-yy')
THEN
v_STD_REVISED_AMT_INT := (V_STANDRD_AMT - v_OD_Discount) + (V_STANDRD_AMT - v_OD_Discount) * 
2.5/100;

但作为,我遇到了错误

ORA-01861:文字与格式字符串不匹配

请建议我如何解决问题

字符串'2017-03-15T00:00:00+05:30'表示带时区的时间戳。如果你想忽略时间和区域,你可以只使用字符串的日期部分,但你仍然需要提供正确的格式掩码:

TO_DATE(SUBSTR(r.FINAL_SR_DATE, 1, 10), 'YYYY-MM-DD')

你也可以保留时间部分,忽略时区(如果你确定这是一件有效的事情(:

TO_DATE(SUBSTR(r.FINAL_SR_DATE, 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS')

尽管当你与午夜的日期进行比较时,你的价值中的时间部分有点无关紧要。

您还应该使用4位数的年份作为比较的右侧:

TO_DATE('01-10-2016', 'dd-mm-yyyy')

或者更简单地说是一个日期文字:

DATE '2016-10-01'

所以你最终会得到:

TO_DATE(SUBSTR(r.FINAL_SR_DATE, 1, 10), 'YYYY-MM-DD') >= DATE '2016-10-01'

如果您也想保留时区偏移,则需要不同的数据类型:

TO_TIMESTAMP_TZ(r.FINAL_SR_DATE, 'YYYY-MM-DD"T"HH24:MI:SSTZH:TZM')

然后在必要时调整时区,并与另一个具有时区值的时间戳进行比较,该时间戳也可以是文字,例如:

TIMESTAMP DATE '2016-10-01 00:00:00 UTC'

TIMESTAMP DATE '2016-10-01 00:00:00+05:30'

所以你最终会得到:

TO_TIMESTAMP_TZ(r.FINAL_SR_DATE, 'YYYY-MM-DD"T"HH24:MI:SSTZH:TZM')
>= TIMESTAMP DATE '2016-10-01 00:00:00+05:30'

或者适合您的环境的任何偏移;或者优选地具有时区区域而不是偏移。

最新更新