NHibernate:HQL:從日期字段中刪除時間部分 (NHibernate:HQL: Remove time part from date field)


問題描述

NHibernate:HQL:從日期字段中刪除時間部分 (NHibernate:HQL: Remove time part from date field)

I'm trying to group table values by date, and this HQL query works fine:

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

The problem is that field af.SubmitedDate also contains time part, sine I'm using SQL Server 2005, so the grouping is done by date-time, not only by date. When I try to do something like this in HQL:

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

...I receive this error:

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

This query is correct in TSQL and I even read somewhere that CONVERT can be used,  but I read it on Java's Hibernate forum.

So, how can I remove time part from this date, so that grouping works correct ?

Thanks in advance, Dejan.


參考解法

方法 1:

You could use one of the built in functions in hql see mssql2000dialect

In your case Date seems to be the one

方法 2:

I created a Scalar-Valued function inside the SQL Server 2005, which encapsulates this command:

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

And inside the XML definition I placed this:

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

So, my HQL query looks at the end like this:

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

and this works flawlessly.

(by DejancwsDejan)

參考文件

  1. NHibernate:HQL: Remove time part from date field (CC BY-SA 3.0/4.0)

#datetime #hql #nhibernate






相關問題

NHibernate:HQL:從日期字段中刪除時間部分 (NHibernate:HQL: Remove time part from date field)

如何獲得在給定時間內發送超過 X 個數據包的 IP (How do I get IPs that sent more than X packets in less than a given time)

Памылка дадання даты пры адніманні ад 0:00 (Dateadd error when subtracting from 0:00)

查找與日曆相比缺失的日期 (Find missing date as compare to calendar)

CodeReview:java Dates diff(以天為單位) (CodeReview: java Dates diff (in day resolution))

顯示兩個給定時間之間的 15 分鐘步長 (display 15-minute steps between two given times)

如何在 C# 中獲取月份名稱? (How to get the month name in C#?)

fromtimestamp() 的反義詞是什麼? (What is the opposite of fromtimestamp()?)

構建 JavaScript 時缺少模塊 (Missing Module When Building JavaScript)

setTimeout 一天中的特定時間,然後停止直到下一個特定時間 (setTimeout for specific hours of day and then stop until next specific time)

將浮點數轉換為 datatime64[ns] (Converting float into datatime64[ns])

Python Dataframe 在連接時防止重複 (Python Dataframe prevent duplicates while concating)







留言討論