PostgreSQL 11 spring JPA 查询错误 java.sql.Date 对象和 TO_DATE 函数格式为 YYYY-DD-MM
PostgreSQL 11 spring JPA query error with java.sql.Date object and TO_DATE fucntion with format YYYY-DD-MM
我正在将 java.sql.Date
对象传递给 CrudRepository 本机查询。此日期对象被传递给格式为 ('YYYY-DD-MM') 的日期函数。此查询适用于 PostgreSQL 9.4,但当数据库为 PostgreSQL 11 时会出错。我尝试了 JDBC 驱动程序 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 中有效。
知道这里发生了什么。
因为 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=#
我正在将 java.sql.Date
对象传递给 CrudRepository 本机查询。此日期对象被传递给格式为 ('YYYY-DD-MM') 的日期函数。此查询适用于 PostgreSQL 9.4,但当数据库为 PostgreSQL 11 时会出错。我尝试了 JDBC 驱动程序 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 中有效。
知道这里发生了什么。
因为 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=#