hibernate查询比较表中的两个日期字段

时间:2015-09-25 15:07:04

标签: hibernate postgresql

我在我的应用程序中使用PostgreSQL数据库和hibernate。我有一个包含两个字段的表:updated_date没有时区的时间戳和没有时区的processed_time时间戳。我有以下查询:

String hql = "From WebContentDefinition wcd where  wcd.pageUpdatedDate > wcd.processedTime";
Query query = session.createQuery(hql);

这里WebContentDefinition是与表对应的pojo。现在,字段processed_time有时可能不包含任何值。 我当前的查询不会返回任何内容。有没有解决方案。我想要updated_date比processed_time更重要的所有行。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,请按以下表格进行操作:

postgres=# select * from WebContentDefinition
postgres-# ;
pageupdateddate   |    processedtime
---------------------+---------------------
2015-09-28 09:41:37 | 2015-09-28 09:41:35
2015-09-26 09:41:37 | 2015-09-26 09:30:35
2015-09-26 09:40:37 |
(3 rows)

这是您当前查询的输出:

postgres=# select *  From WebContentDefinition wcd where  wcd.pageUpdatedDate > wcd.processedTime;
pageupdateddate   |    processedtime
---------------------+---------------------
2015-09-28 09:41:37 | 2015-09-28 09:41:35
2015-09-26 09:41:37 | 2015-09-26 09:30:35
(2 rows)

您可以使用COALESCE将processedTime设置为某个旧日期(如果为null),然后运行相同的查询:

postgres=# select pageupdateddate, COALESCE(processedTime, '1900-01-01 00:00:00') from WebContentDefinition;
pageupdateddate   |      coalesce
---------------------+---------------------
2015-09-28 09:41:37 | 2015-09-28 09:41:35
2015-09-26 09:41:37 | 2015-09-26 09:30:35
2015-09-26 09:40:37 | 1900-01-01 00:00:00
(3 rows)

查询的最终输出:

postgres=# select *  From WebContentDefinition wcd where  wcd.pageUpdatedDate > COALESCE(wcd.processedTime, '1900-01-01 00:00:00');
pageupdateddate   |    processedtime
---------------------+---------------------
2015-09-28 09:41:37 | 2015-09-28 09:41:35
2015-09-26 09:41:37 | 2015-09-26 09:30:35
2015-09-26 09:40:37 |
(3 rows)