我正在尝试按日期对表值进行分组,这个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论坛上看到了它。
那么,如何从此日期中删除时间部分,以便分组工作正确?
提前致谢, 德扬。
答案 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
这完美无瑕。