2017-08-03 384 views
0

我正在使用spring,hibernate和mysql。我想要我的时区的日期和时间。我来自斯里兰卡,所以我想补充+5小时30分钟now()函数在sql;使用now()sql添加小时和分钟到hql

我写了一个查询,并在sql workbench中运行它,它的工作正常。

SELECT date_add(date_add(now(),INTERVAL +5 HOUR),INTERVAL 30 MINUTE); 

的DATE_ADD()函数的特定时间/日期 间隔已被加入后返回日期。 但是当我添加到hql时,它会引发错误。我在HQL完整的查询是

FROM Survey where convert(endDateTime, datetime)< date_add(date_add(now(),INTERVAL +5 HOUR),INTERVAL 30 MINUTE); 

当我在SQL工作台,其做工精细使用上面的代码。但它在hql中不起作用。

错误是

nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: expecting CLOSE, found 'HOUR' near line 1, column 114 [FROM com.pulseBeatMaster.model.Survey where convert(endDateTime, datetime)< date_add(date_add(now(),INTERVAL +5 HOUR),INTERVAL 30 MINUTE)]; nested exception is org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found 'HOUR' near line 1, column 114 [FROM com.pulseBeatMaster.model.Survey where convert(endDateTime, datetime)< date_add(date_add(now(),INTERVAL +5 HOUR),INTERVAL 30 MINUTE)]] with root cause 

有什么方法让我的时区的当前日期和时间或增加5小时30分钟now()

在此先感谢。

+1

不计算在HQL时间或SQL。在java中计算 – Jens

+0

相当多@When –

+0

sql中的campare正在工作@Jens。例如'FROM Survey where(endDateTime,datetime) varman

回答

1

几乎所有@Jens说的,我不认为HQL支持所有的日期函数,或者在你的代码中计算日期(应该很简单),或者使用本机查询,因为你似乎没有使用任何查询参数。

此外,转换存在的事实并不意味着date_add或date_sub存在。

在大多数情况下,日期将在代码上进行计算,即使只是为了便于在您只想更改某些数据的情况下重新使用相同的查询。

+0

有没有办法解决我的问题?像@Jens所说的 – varman

+0

,在java中计算日期。然后使用hql:FROM Survey转换(endDateTime,datetime)<:dateToCompare。 然后你只需要设置dateToCompare –

+0

我很生气,它是一个最简单的解决方案,非常感谢你。 'LocalDateTime now = LocalDateTime.now(); String hql =“FROM Survey where status = 1 and convert(endDateTime,datetime)<:dateNow”;查询查询=(查询)sessionFactory.getCurrentSession()。createQuery(hql); \t \t query.setParameter(“dateNow”,now);' – varman

1

这里是mysql timzone support doc你的一个选择:

您可以在与--timezone = TIMEZONE_NAME选项为mysqld_safe启动设置MySQL服务器系统时区。

或者

如果你有SUPER权限,可以在运行时使用此语句设置全局服务器时区值:

mysql> SET GLOBAL time_zone = '+5:30';