NHibernate:HQL:从日期字段中删除时间部分

时间:2009-06-30 14:33:28

标签: nhibernate datetime hql

我正在尝试按日期对表值进行分组,这个HQL查询工作正常:

 SELECT  af.SubmitedDate, COUNT (af.Id) 
 FROM ApplicationForm af 
 GROUP BY af.SubmitedDate

问题是字段af.SubmitedDate还包含时间部分,正弦我正在使用SQL Server 2005,因此分组是按日期时间完成的,而不仅仅是按日期。 当我尝试在HQL中执行类似的操作时:

SELECT CONVERT(VARCHAR(10), af.SubmitedDate, 105), COUNT (af.Id)
FROM ApplicationForm af 
GROUP BY CONVERT(VARCHAR(10), af.SubmitedDate, 105)

...我收到此错误:

NHibernate.QueryException was unhandled by user code
Message="undefined alias or unknown mapping: CONVERT 

这个查询在TSQL中是正确的,我甚至读过可以使用CONVERT的地方, 但是我在Java的Hibernate论坛上看到了它。

那么,如何从此日期中删除时间部分,以便分组工作正确?

提前致谢, 德扬。

2 个答案:

答案 0 :(得分:3)

您可以在hql中使用其中一个内置函数,请参阅mssql2000dialect

在您的情况下,日期似乎是一个

答案 1 :(得分:1)

我在SQL Server 2005中创建了一个Scalar-Valued函数,它封装了 这个命令:

CONVERT(VARCHAR(10), af.SubmitedDate, 105)

在XML定义中我放置了这个:

<property name='SubmitedDateWithoutTime' formula='dbo.RemoveTimeFromDateTime(SubmitedDate)'/>

所以,我的HQL查询看起来像这样:

SELECT  af.SubmitedDateWithoutTime, COUNT (af.Id) 
FROM ApplicationForm af 
GROUP BY af.SubmitedDateWithoutTime

这完美无瑕。