今天在工作上遇到了一個問題,需要按時間查詢,可是查詢出來的結果顯示的不正確。舉個例子來說,要找出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 的表示日期的文字。
說明可用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 日所在的星期。有關數值,請參閱“設定”部分。
說明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 表示相差一個年份。