我在我的应用程序中使用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更重要的所有行。
答案 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)