ORA-01855: AM / A.M. или PM / P.M. требуется - PullRequest
2 голосов
/ 12 марта 2012

Я получаю сообщение об ошибке: 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 ]

5 голосов
/ 12 марта 2012

Ваша маска формата должна соответствовать формату строки, которую вы конвертируете.Поэтому вы можете либо добавить 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') )
0 голосов
/ 23 сентября 2018

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

...