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 の組み込み関数の 1 つを使用できます。 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 に答える