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

NHibernate:HQL:从日期字段中删除时间部分,nhibernate,datetime,hql,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.Subm

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

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

提前感谢,,
Dejan.

您可以使用hql中的一个内置函数,请参见


在您的例子中,日期似乎就是我在SQLServer2005中创建的标量值函数,它封装了 此命令:

CONVERT(VARCHAR(10), af.SubmitedDate, 105)
在XML定义中,我放置了以下内容:

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

这是完美的。

谢谢你的回答。我使用的是MS SQL 2005方言,但是你能不能写一个例子,我如何使用这个,因为我是这方面的新手。谢谢。我之所以要求这样做,是因为我猜我可以在从DB获得结果后应用内置函数,或者在我将传递给HQL查询的某个值上应用内置函数,这不是我在这里需要的。在执行分组依据时,我需要从日期字段中删除时间部分,以便我的最终结果是仅按日期分组的记录,而不是按日期时间分组的记录。
SELECT  af.SubmitedDateWithoutTime, COUNT (af.Id) 
FROM ApplicationForm af 
GROUP BY af.SubmitedDateWithoutTime