Вы пытаетесь использовать значение даты, которое содержит 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')
Числа совпадают с полями формата, а пробел используется для всего, что вы хотите игнорировать (дефисы, двоеточия, точкии т.д.) * * тысяча двадцать-один