2011-06-28 16 views
2

私はDateTime型の誕生日の列を含むテーブルを持っています。今度は、誕生日が次の10日間、または過去5日間だったすべてのPersonをHQLで選択する必要があります。どのようにNHibernate 3.2 HQLでこれを行うことができますか?おかげさまで トーマスはNHibernate next誕生日

+1

'where'句を使用します。 –

答えて

2

var result = 
session.CreateQuery(@"from Person 
         where 1 = (FLOOR(DATEDIFF(dd,Birthday,GETDATE()+10)/365.25)) 
            - 
           (FLOOR(DATEDIFF(dd,Birthday,GETDATE()-5)/365.25))") 
     .List<Person>(); 
0

HQLでは、1つの方法は次のとおりです。

Session.CreateQuery("FROM PersonTable WHERE Birthday <= :todayPlusTenDays AND Birthday >= :todayLessFiveDays") 
.SetParameter(":todayPlusTenDays", DateTime.Today.AddDays(10)) 
.SetParameter(":todayLessFiveDays", DateTime.Today.AddDays(-5)) 

また、私の頭の上からではない包括的であるかの間であればしかし、私はわからない午前:私はそれを解決した

Session.CreateQuery("FROM PersonTable WHERE Birthday BETWEEN :todayLessFiveDays AND :todayPlusTenDays") 
    .SetParameter(":todayPlusTenDays", DateTime.Today.AddDays(10)) 
    .SetParameter(":todayLessFiveDays", DateTime.Today.AddDays(-5)) 
+0

ありがとうございますが、この解決策の問題は、今日のようにバターデーの年が異なるため、今後10日間で生まれたばかりの人や生まれてくる人しか見つからないということです。今年を意識せずにどのように選ぶことができますか? – BennoDual

+0

非常に良い点、私はそれが私のコーヒーなしで返信を投稿するにはあまりにも早いと知っていた:)正直に言うと、これを達成する方法についてはあまり確かではありませんが、1つの方法は、年を入力し、最小日と最大日(どちらも年の日数に変換)をHQLに渡します。 (私は2月1日が32日になることを意味します。)これはSQLサーバー内で実行可能であることがわかります。 – TheITGuy

関連する問題