首先講講要用到的兩個數據庫函數,dateadd和datediff函數。
dateadd函數:DateAdd(interval, number, date)返回的是一個日期數據,函數的三個形參都是必要。
interval表示時間的間隔可以是yy(表示年),mm(表示月),dd(表示日),qq(表示季度),ww(表示周);
number表示間隔的數值,正數表示日期數據date的未來,負數表示日期數據大特的從前。
date為日期數據,一般就是數據表裡面的某個日期字段如birthday生日字段。
示例 Select dateadd(dd,3,'2008-10-05') 得到的結果就是2008-10-08.
datediff函數:DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) 返回的是一個數值,這個數值表示date1和date2之間相隔時間間隔interval的數值。
interval表示時間間隔,可以是yy(表示年),mm(表示月),dd(表示日),qq(表示季度),ww(表示周),hh(表示小時),n(表示分鐘),s(表示秒)
date1, date2是計算中進行計算的兩個日期
Firstdayofweek 可選。指定一個星期的第一天的常數。如果未予指定,則以星期日為第一天。
firstweekofyear 可選。指定一年的第一周的常數。如果未予指定,則以包含 1 月 1 日的星期為第一周。
示例:Select datediff(dd,'2008-10-05','2008-10-08') 結果為3
了解以上兩個函數的用法,我們就可以利用它們來求得某段時間內過生日的員工名單,如存放員工信息的表為StaffBasic,表中員工生日字段名為Birthday,BeginTime變量存儲從前台得到的查詢生日的開始時間,EndTime變量存儲從前台得到的查詢生日的結束時間,則查詢語句SQL的寫法如下:
Select * From StaffBasic where
(dateadd(year,datediff(year,birthday,'"+BeginTime+"'),birthday) between '"+BeginTime+"' and '"+EndTime+"'
or
dateadd(year,datediff(year,birthday,'"+BeginTime+"'),birthday) between '"+BeginTime+"' and '"+EndTime+"')
分析一下這個語句的含義:
(dateadd(year,datediff(year,birthday,'"+BeginTime+"'),birthday)和
dateadd(year,datediff(year,birthday,'"+EndTime+"'),birthday)
的作用是把所有的員工的出生的年份改成是查詢中輸入日期的年份,因為前台查詢輸入的是兩個日期,這兩個日期可能年份不同,如前台查詢的是2007-12-20到2008-1-20這個時間段的過生日員工名單,所以需要考慮兩種年份情況,然後通過between '"+BeginTime+"' and '"+EndTime+"' 進行符合條件的記錄的篩選。