ORA-01855: требуется AM/AM или PM/PM

Я получаю ошибку: ORA-01855: AM/A.M. or PM/P.M. required

когда я пытаюсь выполнить следующий запрос.

  INSERT INTO TBL(ID,START_DATE) 
    values (123, TO_DATE ('3/13/2012 9:22:00 AM', 'MM/DD/YYYY HH:MI AM'))

Где моя START_DATE столбец имеет тип "Дата".

Я выполнил следующий запрос, и он не дал ошибок, но все еще не увенчался успехом в вышеуказанном выпуске:

ALTER SESSION SET NLS_DATE_FORMAT = "MM/DD/YYYY HH:MI AM";

2 ответа

Решение

Ваша маска формата должна соответствовать формату строки, которую вы конвертируете. Так что вы бы хотели добавить SS в маску формата или уберите секунды из строки

INSERT INTO TBL(ID,START_DATE) 
  values (123, TO_DATE ('3/13/2012 9:22:00 AM', 'MM/DD/YYYY HH:MI:SS AM'))

или же

INSERT INTO TBL(ID,START_DATE) 
  values (123, TO_DATE ('3/13/2012 9:22 AM', 'MM/DD/YYYY HH:MI:SS AM'))

Если вы хотите принять строку, содержащую секунды, но не хотите хранить секунды в базе данных (в этом случае Oracle всегда будет хранить 0 для секунд), вы можете использовать TRUNC функция

INSERT INTO TBL(ID,START_DATE) 
  values (123, TRUNC( TO_DATE ('3/13/2012 9:22:00 AM', 'MM/DD/YYYY HH:MI:SS AM'), 'MI') )

Я получил ту же ошибку при запуске конструктора форм, она была исправлена ​​путем изменения Filed DataType с TIME на CHAR.

Другие вопросы по тегам