Ошибка SQL 2207 для TO_TIMESTAMP () с использованием формата даты и времени - PullRequest
0 голосов
/ 14 ноября 2018

В Postgres я пытаюсь выполнить запрос на основе даты / времени в моем предикате WHERE.

Когда я пытаюсь выбрать с этим форматом даты / времени, ошибка SQL говорит, что значение должно быть целым числом. Я не уверен, почему он не думает, что моя минута 17 не является целым числом или почему она видит только 1, а не 17?

SELECT *
FROM history
WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728','yyyy-MM-dd''T''HH:mm:ss.SSS');

ОШИБКА: недопустимое значение ": 1" для "ЧЧ" ДЕТАЛИ: Значение должно быть целым числом. Состояние SQL: 22007

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вы пытаетесь использовать значение даты, которое содержит T, и похоже, что вы пытаетесь объявить TO_TIMESTAMP, что T - это буквальное значение, которое следует игнорировать.Проблема в том, что вы делаете это, помещая 'T' (apostrophe-T-apostrophe, escaped), который включает синтаксический анализатор на 3 символа, и затем он встречает ': 1' с 23:17, когда он ожидает HH:

--your date, and underneath it, the format you gave
2018-10-08T23:17:44.728
yyyy-MM-dd'T'HH:mm:ss.SSS

Вы видите, как HH выравнивается (по вертикали) с: 1?Postgres жалуется, что ожидал целое число, которое он может проанализировать до 23, но ему встретилась строка: 1, которая не является целым числом.

Этот вопрос:

Postgres- должен to_timestamp () игнорировать / не читать определенный символ в середине строки даты / времени

Подразумевает, что вы можетепоместите пробел в формате, где находится буква T, или просто приведите строку, которая у вас есть, к метке времени - postgres, очевидно, может проанализировать эту строку как метку времени, не прибегая к буквальному выводу формата для нее явно

Try:

SELECT *
FROM history
WHERE create_time > TIMESTAMP '2018-10-08T23:17:44.728'

SELECT *
FROM history
WHERE create_time > cast('2018-10-08T23:17:44.728' as timestamp)

SELECT *
FROM history
WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728','yyyy-MM-dd HH:mm:ss.SSS');

Вы можете даже найти это:

SELECT *
FROM history
WHERE create_time > TO_TIMESTAMP('2018-10-08T23:17:44.728', 'yyyy MM dd HH mm ss SSS')

Числа совпадают с полями формата, а пробел используется для всего, что вы хотите игнорировать (дефисы, двоеточия, точкии т.д.) * * тысяча двадцать-один

0 голосов
/ 14 ноября 2018

Проблема связана с использованием ''T'', который стоит до HH, и БД сигнализирует о том, что вы можете использовать

TO_TIMESTAMP('2018-10-08 23:17:44.728','yyyy-mm-dd HH24:MI:SS.MS')

вместо.

...