查询中的日期错误?

时间:2012-01-18 04:38:15

标签: sql oracle

我需要一些关于此查询的帮助:

update MSG_TRACE set MSG_SENT_STATUS = 'INIT',ERROR_CODE = 0,RETRY_COUNT = 0 where MSG_RECEIVED_TIME >= '16-01-2012 00:00:00,000000' and OPER_TXN_ID like 'CAP%' and MSG_SENT_STATUS in ('FAILED','ERROR');

它给了我这个错误: ORA-01843:不是有效月份

MSG_RECEIVED_TIME的格式为DD / MM / YYYY HH:MM:SS.mmmmmm 像16/01/2012 02:46:34.729643 PM

非常感谢你

3 个答案:

答案 0 :(得分:2)

毫秒部分表示它不是日期。您需要转换为时间戳,例如:

select to_timestamp('16-01-2012 00:00:00,000000','dd-mm-yyyy hh24:mi:ss,FF')
from dual

如果您需要它作为日期格式,那么您可以进一步投射:

select to_date(
         to_char(
           to_timestamp('16-01-2012 00:00:00,000000'
                       ,'dd-mm-yyyy hh24:mi:ss,FF')
          ,'dd-mm-yyyy hh24:mi:ss')
        ,'dd-mm-yyyy hh24:mi:ss')
  from dual

答案 1 :(得分:0)

您的数据库配置为MM/DD/YYYY因此16/01/2012无效,因为没有16个月。你有三个选择:

  1. 将2012年1月16日更改为2012年1月16日。
  2. 将您的数据库更改为DD / MM / YYYY
  3. 尝试将16个月添加到我们的日历... =)

答案 2 :(得分:0)

'01-16-2012 00:00:00,000000'不正确...尝试使用'16-01-2012 00:00:00'

你的日期也不错......

ORA-01843: not a valid month错误即将到来,因为您将月份设置为16,这是错误的...

时间戳中的日期格式如下

DD/MM/YYYY HH:MM:SS:MM