如何在HQL中比较时间戳和日期?

时间:2017-06-14 16:13:26

标签: java hibernate

有一个时间戳字段ordered_ts映射到一个类。我需要获取实例

1)(ordered_ts为空)或

2)(ordered_ts<> current_date)

这是我尝试过的。这是HQL语法(非特定于数据库)

SELECT . . . 
WHERE (CAST(coalesce(t.ordered_ts, TO_TIMESTAMP('2000-01-01 00:00:00', 
'YYYY-MM-DD HH24:MI:SS')) as DATE) <> CURRENT_DATE) 

但它会抛出

java.lang.NullPointerException
    at org.hibernate.dialect.function.CastFunction.render(CastFunction

(PS底层数据库是mysql。但我正在寻找HQL查询)

1 个答案:

答案 0 :(得分:1)

对于SQL

使用FROM_UNIXTIME()

SELECT . . . 
WHERE (FROM_UNIXTIME(coalesce(t.ordered_ts, TO_TIMESTAMP('2000-01-01 00:00:00', 
'YYYY-MM-DD HH24:MI:SS')) as DATE) <> CURRENT_DATE)

适用于HQL

在查询中使用之前,您应该将字段ordered_ts转换为日期。 见下面的例子:

 Date ordered_ts_date= new Date(ordered_ts.getTime());

然后

SELECT . . . WHERE ordered_ts_date <> CURRENT_DATE)