SQL Server,HQL:如何将 SQL Server 日期时间列字段与日期进行比较
Posted
技术标签:
【中文标题】SQL Server,HQL:如何将 SQL Server 日期时间列字段与日期进行比较【英文标题】:SQL Server, HQL: How to compare SQL server datetime column field to date 【发布时间】:2016-10-08 11:37:10 【问题描述】:我有以下 SQL 查询,我需要让它在 HQL 中工作,我尝试了几个解决方案,但没有一个工作。(数据库:SQL 服务器)
select t.createdTimeStamp FROM ServiceData t , UserInfo C where C.UserId = t.UserId and CAST(t.createdTimeStamp AS DATE) = '2016-05-30'
我尝试在 HQL 中进行以下操作,但没有成功,(createdTimeStamp 在 sql server 中属于 datetime 数据类型)
查询:
select t.createdTimeStamp FROM ServiceData t , UserInfo C where C.UserId = t.UserId and CAST(t.createdTimeStamp AS DATE) = '2016-05-30'
错误:
org.hibernate.QueryException: Could not resolve requested type for CAST : DATE
任何有关如何使其工作的建议都会有所帮助。
【问题讨论】:
你试过转换日期参数吗?select t.createdTimeStamp FROM ServiceData t , UserInfo C where C.UserId = t.UserId and CAST(t.createdTimeStamp AS DATE) = CAST('2016-05-30' as date)
@vercelli 我试过了,得到以下错误 " java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNode [IDENT] IdentNode : 'createdTimeStamp' originalText=createdTimeStamp ] 根本原因 java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNode "
也许这会对你有所帮助:***.com/questions/26471534/…
@vercelli,感谢您的建议,我在下面的 URL 中找到了帮助。***
【参考方案1】:
你必须按照下面的方式编写cast命令,然后它就会起作用
cast(t.createdTimeStamp as date)
所以小写的“cast”、“as”和“date”
【讨论】:
只有date
需要小写 - blogs.sentryone.com/aaronbertrand/…【参考方案2】:
我从 *** URL 下面找到了答案 ***-date-is-not-a-recognized-built-in-function-name
我使用 CONVERT 而不是 CAST 并且它有效
查询:select t.createdTimeStamp FROM ServiceData t , UserInfo C where C.UserId = t.UserId and CONVERT(date,t.createdTimeStamp) = '2016-05-30'
但不确定为什么 CAST 不起作用,因为支持 Hibernate Doc CAST
【讨论】:
以上是关于SQL Server,HQL:如何将 SQL Server 日期时间列字段与日期进行比较的主要内容,如果未能解决你的问题,请参考以下文章
NHibernate HQL 生成器支持 SQL Server 2016 时态表
NHibernate HQL Generator支持SQL Server 2016时态表
如何将任何给定的 SQL/HQL 选择查询动态转换为等效计数查询?