select convert(varchar(8),getdate(),112)
Sql 中日期函數(shù)的比較
作者:corin 日期:2006-06-15
字體大小: 小 中 大?
下午公司的項目完成了會員系統(tǒng),會員可以后臺設(shè)置到期時間!
大概字段有PostDate,EndDate標志注冊時間和到期時間!
上午把到期時間,剩余天數(shù)及24小時登錄和和注冊的用戶多完成了,用了一個函數(shù)DateDitt
檢測24小時登錄和注冊用戶的Sql語句:
Case "Login":strSql=strSql+HZ.iif(Instr(strSql,"Where")>0," AND DateDiff(hh,LastDate,getdate())<25"," Where DateDiff(hh,LastDate,getdate())<25")
Case "Reg":strSql=strSql+HZ.iif(Instr(strSql,"Where")>0," AND DateDiff(hh,PostDate,getdate())<25"," Where DateDiff(hh,PostDate,getdate())<25")
其時已經(jīng)實現(xiàn)了會員到期自動紅子提示,后來要完成搜索就是可以把離到期還剩余15天的會員多列舉出來,用DateDiff函數(shù)調(diào)試了半天多不正確,剛開始以為是“'”的問題, 后來檢查了發(fā)現(xiàn)沒有問題基本確認是DateDiff函數(shù)問題,可是上面檢測時間的時候正確,而且Sql中也可是使用這個函數(shù),郁悶大概調(diào)試了2個小時問題依然沒有解決!
偶然想到了DateAdd函數(shù)改SQL語句如下:
Case "EndDate":strSql=strSql+HZ.iif(Instr(strSql,"Where")>0," AND EndDate < DateAdd(d,15,getdate())"," Where EndDate < DateAdd(d,15,getdate())")
調(diào)試通過,呼呼奇怪的問題后臺去網(wǎng)上搜索下也沒有滿意的答案,只是找到這樣一段
Select member_number, first_name, last_name? FROM members
Where DATEDIFF(yy,datofbirth,GETDATE()) > 21
應改為:
Select member_number, first_name, last_name? FROM members
Where dateofbirth < DATEADD(yy,-21,GETDATE())
即:任何對列的操作都將導致表掃描,它包括數(shù)據(jù)庫函數(shù)、計算表達式等等,查詢時要盡可能將操作移至等號右邊。