2

我正在尝试按日期对表值进行分组,并且此 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 论坛上读到了它。

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

在此先感谢,德扬。

4

2 回答 2

3

您可以使用 hql 中的内置函数之一,请参阅mssql2000dialect

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

于 2009-06-30T19:39:30.060 回答
1

我在 SQL Server 2005 中创建了一个标量值函数,它封装了这个命令:

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

这完美无瑕。

于 2009-07-05T15:49:43.867 回答