Java 使用now()sql将小时和分钟添加到hql
我正在使用spring、hibernate和mysql。我要我的时区的日期和时间。我来自斯里兰卡,所以我想用sql中的Java 使用now()sql将小时和分钟添加到hql,java,mysql,hibernate,Java,Mysql,Hibernate,我正在使用spring、hibernate和mysql。我要我的时区的日期和时间。我来自斯里兰卡,所以我想用sql中的now()函数添加+5小时30分钟 我编写了一个查询,并在sql workbench中运行它,运行良好 SELECT date_add(date_add(now(),INTERVAL +5 HOUR),INTERVAL 30 MINUTE); 函数的作用是:返回特定时间/日期之后的日期 已添加间隔。 但当我添加到hql时,它会抛出错误。我在hql中的完整查询是 从调查中转换(e
now()
函数添加+5小时30分钟
我编写了一个查询,并在sql workbench中运行它,运行良好
SELECT date_add(date_add(now(),INTERVAL +5 HOUR),INTERVAL 30 MINUTE);
函数的作用是:返回特定时间/日期之后的日期
已添加间隔。
但当我添加到hql时,它会抛出错误。我在hql中的完整查询是
从调查中转换(endDateTime,datetime)
当我在sql workbench中使用上述代码时,它工作正常。但它在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
嵌套异常为org.springframework.dao.InvalidDataAccessResourceUsageException:预期关闭,在第1行第114列附近发现“小时”[来自com.pulseBeatMaster.model.Survey,其中convert(endDateTime,datetime)
是否有任何方法可以获取我所在时区的当前日期和时间,或者使用now()
添加+5小时30分钟
提前感谢。正如@Jens所说,我认为目前HQL不支持所有日期函数,或者在代码中计算日期(应该很简单),或者使用本机查询,因为您似乎没有使用任何查询参数 另外,convert的存在并不意味着date\u add或date\u sub的存在
在大多数情况下,日期都会在代码上计算,即使只是为了方便在您只想更改某些数据的情况下重新使用相同的查询。与@Jens所说的差不多,我认为目前HQL不支持所有日期函数,或者在代码中计算日期(应该非常简单),或者使用本机查询,因为您似乎没有使用任何查询参数 另外,convert的存在并不意味着date\u add或date\u sub的存在
在大多数情况下,日期将在代码上计算,即使只是为了方便在您只想更改某些数据的情况下重新使用相同的查询。这里有一个备选方案供您选择: 您可以在启动时使用--timezone=timezone\u name选项将MySQL服务器的系统时区设置为mysqld\u safe 或 如果您具有超级权限,则可以使用以下语句在运行时设置全局服务器时区值:
以下是您的备选方案: 您可以在启动时使用--timezone=timezone\u name选项将MySQL服务器的系统时区设置为mysqld\u safe 或 如果您具有超级权限,则可以使用以下语句在运行时设置全局服务器时区值:
不要在HQL或SQL中计算时间。在Java中计算几乎所有sql中的@jencapare都在@Jens中工作。示例
来自调查,其中convert(endDateTime,datetime)来自调查,其中convert(endDateTime,datetime)LocalDateTime now=LocalDateTime.now();String hql=“FROM Survey,其中status=1并转换(endDateTime,datetime)是的,但当您需要比较两个不同的列时,这不起作用。例如,您想检查一个日期列+另一列的一些小时是否大于当前时间。如@Jens所说,用java计算日期。然后使用hql:from Survey where convert(endDateTime,datetime)我真的很生气,这是一个最简单的解决方案,非常感谢。LocalDateTime now=LocalDateTime.now();String hql=“FROM Survey where status=1和convert(endDateTime,datetime)是的,但当需要比较两个不同的列时,这不起作用。例如,您希望检查一个日期列+另一列的某些小时数是否大于当前时间。。
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
mysql> SET GLOBAL time_zone = '+5:30';