sql查詢(xún)中time字段的使用
time字段應(yīng)該算是sql 語(yǔ)句中一個(gè)特殊字段,在sql查詢(xún)中如何使用time字段成為了我們需要思考的問(wèn)題,下面就將為您分析該問(wèn)題的處理方法,供您參考。
在vbscript中插入的時(shí)候我們因該使用 #2007-5-1#這樣的格式,在sql server 中也可以用'2007-5-1'他會(huì)自動(dòng)轉(zhuǎn)換成時(shí)間格式,但在sql查詢(xún)中因該怎么使用呢。
比如我在數(shù)據(jù)庫(kù)中設(shè)置了一個(gè) user_time 時(shí)間字段,現(xiàn)在我們用這個(gè)來(lái)進(jìn)性查詢(xún)操作
比如我要找某個(gè)=與某個(gè)日期的數(shù)據(jù):
可以這樣寫(xiě):
SELECT * FROM table WHERE user_regTime ='2007-05-01 09:45:25.263' 這里因?yàn)闀r(shí)間字段在寫(xiě)入數(shù)據(jù)庫(kù)時(shí)會(huì)自動(dòng)把沒(méi)有的結(jié)尾的部分自動(dòng)補(bǔ)上所以直接這樣寫(xiě):
SELECT * FROM table WHERE user_regTime ='2007-05-01' 寫(xiě)是搜索不到數(shù)據(jù)的。 因?yàn)殡m然前面相等但是后面還是不相等的。
這因該怎么解決呢。這就需要DATEDIFF函數(shù)來(lái)解決了,他會(huì)自動(dòng)計(jì)算某個(gè)日期的差額,一半我們?cè)O(shè)置為day =0就可以了。
例如:SELECT * FROM table WHERE DATEDIFF(day,user_regTime '2007-05-01' )=0
但是做大與 小與的數(shù)據(jù)可以直接user_regTime >'2007-05-01' 這時(shí)其實(shí)比較字段值和2007-05-01 00:00:00 的大小了。
還有比較特殊的查詢(xún)就是周查詢(xún)了,因?yàn)樵趪?guó)外的星期天是星期一這點(diǎn)和中國(guó)的不一樣,所以取周的時(shí)候因該把當(dāng)前日期全部退夠一天才能比較。
這里運(yùn)用了:datediff返回時(shí)間間隔函數(shù)
datepart取當(dāng)前時(shí)間的某一段函數(shù)
DATEADD 增加某個(gè)時(shí)間段函數(shù)
完整語(yǔ)句就是:
select * from bbs_topics where datediff(d,modifydate,getdate())<(datepart(dw,DATEADD(day, -1, getdate())))
注意這里<而不是<=這是因?yàn)橛?jì)算日期間隔是從0開(kāi)始的所以間隔6就是星期一了,如過(guò)還=7則連上星期天都計(jì)算進(jìn)去了。
modifydate是時(shí)間字段,dw是返回星期幾,dateadd里面的-1是在當(dāng)前日期減去1天
好多人寫(xiě)刷選一周的是這樣寫(xiě)的 datediff(d,modifydate,getdate())<=7這樣寫(xiě)其實(shí)是不對(duì)的,因?yàn)樵谝恢艿男瞧诙r(shí)間和上周的星期6之間他們之間是不同周,但時(shí)間差4天還是<=7的。
還就是月份 datediff(d,modifydate,getdate())<=32這樣寫(xiě)也是不對(duì),道理同上。
因該這樣寫(xiě)datepart(m,modifydate)=datepart(m,getdate())
取的字段值里面的月,在和當(dāng)前月比較相等就是同一月,不等就是不同月。
【編輯推薦】