今天在工作上遇到了一個問題,需要按時間查詢,可是查詢出來的結果顯示的不正確。舉個例子來說,要找出2007-10-12至2007-10-31之間在網站上註冊的會員,選擇好日期後,點擊查詢按鈕,發現2007-10-31註冊的會員的資訊根本沒有顯示出來,試驗了幾次結果都是一樣。調試程式發現,原來是在SQL語句這裡出現了問題。
SQL語句如下:SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'。初看上去這條SQL語句沒有錯誤,可是對照資料庫中對應欄位保存的值以後,發現保存的值並不是簡單的日期形式,而是日期+時間的形式,即:yyyy-MM-dd HH:mm :ss,這時SQL語句在判斷regtime和'2007-10-31'的大小時,會認為'2007-10-31'寫的不完整,所以不會認為這兩個值是相等的。這可怎麼辦呢?
不用急,ASP為我們提供了日期加減的函數,來幫我們解決這個問題。
1.日期相加
DateAdd 函數
傳回已新增指定時間間隔的日期。
DateAdd(interval, number, date)
DateAdd 函數的語法有以下參數
(1)interval 必選項。字串表達式,表示要新增的時間間隔。有關數值,請參閱設定部分。
(2)number 必選項。數值表達式,表示要加的時間間隔的個數。數值表達式可以是正數(得到未來的日期)或負數(得到過去的日期)。
(3)date 必選項。 Variant 或要新增interval 的表示日期的文字。
設定
interval 參數可以有以下值:
設定描述
yyyy 年
q 季
m 月
y 一年的日數
d 日
w 一週的日數
ww 週
h 小時
n 分鐘
s 秒
說明
可用DateAdd 函數從日期中新增或減去指定時間間隔。例如可以使用DateAdd 從當天算起30 天以後的日期或從現在算起45 分鐘以後的時間。若要為date 新增以日為單位的時間間隔,可以使用一年的日數(y)、日(d)或一週的日數(w)。
DateAdd 函數不會傳回無效日期。如下範例將95 年1 月31 日加上一個月:
NewDate = DateAdd(m, 1, 31-Jan-95)
在這個範例中,DateAdd 返回95 年2 月28 日,而不是95 年2 月31 日。如果date 為96 年1 月31 日,則返回96 年2 月29 日,這是因為1996 是閏年。
如果計算的日期是在公元100 年之前,則會產生錯誤。
如果number 不是Long 型值,則在計算前會四捨五入為最接近的整數。
2.日期相減
DateDiff 函數
傳回兩個日期之間的時間間隔。
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
DateDiff 函數的語法有以下參數:
(1)interval 必選項。字串表達式,表示用於計算date1 和date2 之間的時間間隔。有關數值,請參閱設定部分。
(2)date1, date2 必選項。日期表達式。用於計算的兩個日期。
(3)Firstdayofweek 可選項。指定星期中第一天的常數。如果沒有指定,則預設為星期日。有關數值,請參閱設定部分。
(4)Firstweekofyear 可選項。指定一年中第一週的常數。如果沒有指定,則預設為1 月1 日所在的星期。有關數值,請參閱設定部分。
設定
interval 參數可以有以下值:
設定描述
yyyy 年
q 季
m 月
y 一年的日數
d 日
w 一週的日數
ww 週
h 小時
n 分鐘
s 秒
firstdayofweek 參數可以有以下值:
常數值描述
vbUseSystem 0 使用區域語言支援(NLS) API 設定。
vbSunday 1 星期日(預設)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
firstweekofyear 參數可以有以下值:
常數值描述
vbUseSystem 0 使用區域語言支援(NLS) API 設定。
vbFirstJan1 1 由1 月1 日所在的星期開始(預設)。
vbFirstFourDays 2 由在新年中至少有四天的第一周開始。
vbFirstFullWeek 3 由在新的一年中第一個完整的周開始。
說明
DateDiff 函數用來判斷兩個日期之間存在的指定時間間隔的數目。例如可以使用DateDiff 計算兩個日期相差的天數,或當天到當年最後一天之間的星期數。
要計算date1 和date2 相差的天數,可以使用一年的日數(y)或日(d)。當interval 為一週的日數(w)時,DateDiff 傳回兩個日期之間的星期數。如果date1 是星期一,則DateDiff 計算到date2 之前星期一的數目。此結果包含date2 而不包含date1。如果interval 是周(ww),則DateDiff 函數傳回日曆表中兩個日期之間的星期數。函數計算date1 和date2 之間星期日的數目。如果date2 是星期日,DateDiff 將計算date2,但即使date1 是星期日,也不會計算date1。
如果date1 晚於date2,則DateDiff 函數傳回負數。
firstdayofweek 參數會對使用w和ww間隔符號的計算產生影響。
如果date1 或date2 是日期文字,則指定的年度會成為日期的固定部分。但如果date1 或date2 被納入引號( ) 且省略年份,則在程式碼中每次計算date1 或date2 表達式時,將插入目前年份。這樣就可以編寫適用於不同年份的程式碼。
在interval 為年(yyyy)時,比較12 月31 日和來年的1 月1 日,雖然實際上只相差一天,DateDiff 返回1 表示相差一個年份。