ошибка с датой в запросе? - PullRequest
1 голос
/ 18 января 2012

Мне нужна помощь с этим запросом:

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 находится вформат ДД / ММ / ГГГГ ЧЧ: ММ: СС.мммммм как 16.01.2012 02: 46: 34.729643 PM

большое спасибо заранее

Ответы [ 3 ]

2 голосов
/ 18 января 2012

Часть в миллисекундах означает, что это не дата. Вам необходимо привести к временной метке, такой как:

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
0 голосов
/ 18 января 2012

'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

0 голосов
/ 18 января 2012

Ваша база данных настроена на MM/DD/YYYY, поэтому 16/01/2012 недействительна, поскольку не существует 16 месяцев. у вас есть три варианта:

  1. Изменить 16/01/2012 на 01/16/2012.
  2. Измените вашу БД на ДД / ММ / ГГГГ
  3. Попробуй добавить 16 месяцев в наши каландры ... =)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...