Postgres 12 работает с вашим запросом в том виде, в каком он был опубликован, 9.4 выдает ошибку, которую вы указали, потому что она интерпретирует DDTH
как «день с буквами после», как 1st, 2nd, 3rd, 4th
, т.е. Nth
Итак. Парсер будет использовать день 07
, а затем следующие два символа и выбрасывать их (T2
отбрасывается), затем он смотрит на следующую вещь в строке формата, которая является H24:
- это не распознаваемый заполнитель для чего-либо, поэтому он пропускает также 4 символа из входных данных, прежде чем он доберется до MI
, который он распознает, но теперь :1
из :18
находится в положении для анализа. См. Комментарий ниже:
SELECT TO_TIMESTAMP(
'2020-03-07T22:34:18Z',
-- YEARsMOsDAYNssssMI
'YYYY-MM-DDTHH24:MI');
Key: YEAR/MO/DAYN - recognised things
s - skipped things
Чтобы игнорировать T, используйте пробел, а не литерал T
в строке формата:
SELECT TO_TIMESTAMP('2020-03-07T22:34:18Z', 'YYYY-MM-DD HH24:MI:SS');
На самом деле, вы можете использовать довольно много все остальное, что обычно тоже будет пропущено