Ошибка "Требуется AM/AM или PM/PM", хотя используется AM

У меня есть table_name на оракула 12c, который имеет column_name1 с типом данных "TIMESTAMP(6) с зоной времени". Я использую SQL Developer.

Когда я выбираю что-либо из этого column_name1 с помощью SQL Developer, я вижу такую ​​дату: 19-SEP-17 03.19.55.000000000 PM +00:00 который находится в UTC.

Если я использую тот же формат в моем SQL и выдаю его как строку в предложении where, он работает нормально. Пример:

select column_name1 from table_name where column_name1 = '19-SEP-17 03.19.55.000000000 PM +00:00';

Но я знаю, что рекомендуется конвертировать строку в дату в подобных ситуациях. Поэтому, когда я пытаюсь сделать это с помощью TO_TIMESTAMP, мне не удается найти правильный формат для добавления в SQL.

Что я пробовал это:

select column_name1 from table_name where column_name1 = TO_TIMESTAMP('19-SEP-17 03.19.55.000000000 PM +00:00', 'DD-MON-YYYY HH:MI:SS.FF A.M. TZH:TZM');

И хотя AM /PM уже там, я все еще получаю ошибку как:AM/A.M. or PM/P.M. required

Я попытался добавить 'nls_date_language=american', но все равно получаю ту же ошибку.

Что мне здесь не хватает? Как я могу изменить формат TO_TIMESTAMP, чтобы я мог преобразовать эту строку в TIMESTAMP?

1 ответ

Решение

Вы, на самом деле, используете TO_TIMESTAMP_TZ - как следует, так как столбец является меткой времени WITH TIME ZONE, а входная строка и модель формата предназначены для метки времени WITH TIME ZONE? (Если вы использовали TO_TIMESTAMP таким образом, вы получите другую ошибку, что-то вроде "формат даты не распознан" - поскольку у вас не может быть элементов формата часового пояса в модели формата для временной метки БЕЗ часового пояса).

Предполагая, что это так: проблема вызвана передачей PM (без точек) во входной строке, но с A.M. (с точками) в формате модели. Используйте один и тот же формат в обоих местах - либо с точками, либо без них, но будьте последовательны.

В некоторых местах Oracle не суетится из-за несовпадающих разделителей, но в этом случае это так. Если вам нравится, вы можете просмотреть документацию, чтобы точно выяснить, какие замены будет предпринимать Oracle; но это звучит как академическое упражнение. Просто будьте последовательны между входной строкой и моделью формата, и у вас не возникнет никаких проблем.

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