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