2011-06-28 61 views
2

我有一個表,其中包含一個類型日期時間的生日列。現在我應該選擇HQL所有的人,哪些生日是在未來10天或過去5天。我如何使用NHibernate 3.2 HQL做到這一點? 謝謝。 托馬斯NHibernate獲取下一個生日

+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的一個方法是:

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

非常好的一點,我知道現在爲時尚早,沒有我的咖啡發佈回覆:)不太確定如何用HQL實現這一點說實話,然而,一種方法是將出生日期轉換爲然後將您的最小和最大日期(均轉換爲一年中的第幾天)傳遞給HQL。 (在一年中的日子我的意思,例如2月1日將是第32天) - 我知道這是可行的SQL服務器內。 – TheITGuy