PostgreSQL 11 Spring ошибка запроса JPA с объектом java. sql .Date и функцией TO_DATE в формате YYYY-DD-MM - PullRequest
0 голосов
/ 28 мая 2020

Я передаю объект java.sql.Date в собственный запрос CrudRepository. Этот объект даты передается в функцию даты в формате (ГГГГ-ДД-ММ). Этот запрос работает с PostgreSQL 9.4, но выдает ошибку, когда база данных PostgreSQL 11. Я пробовал драйвер JDB C v42.2.11 и 9.1-901-1. Оба дают одинаковый результат.

Сообщение об ошибке:

ERROR: date/time field value out of range: "2020-05-27 +00:00" 

Код:

@Query(value = "SELECT TO_DATE(?1, 'YYYY-DD-MM')", nativeQuery = true)
public String sampleQuery(java.sql.Date date);

Когда я указал формат даты как "SELECT TO_DATE(?1, 'YYYY-MM-DD')", это время он работал в PostgreSQL 11.

Есть идеи, что здесь происходит.

1 Ответ

1 голос
/ 28 мая 2020

Поскольку 27 не является допустимым месяцем, он не должен работать:

postgres=# select version();
                                                 version                                                 
---------------------------------------------------------------------------------------------------------
 PostgreSQL 11.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)

postgres=# select to_date('2020-05-27 +00:00','YYYY-DD-MM');
ERROR:  date/time field value out of range: "2020-05-27 +00:00"
postgres=# 

И если он работает в 9.4, он дает неожиданный результат:

postgres=# select version();
                                                    version                                                     
----------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.4.26 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)

postgres=# select to_date('2020-05-27 +00:00','YYYY-DD-MM');
  to_date   
------------
 2022-03-09
(1 row)

postgres=# 
...