賽迪網 > IT技術 數據庫 > 精彩更新
  IT資訊搜索
 
IT產品搜索
[程式開發][網管世界][網路安全][數據庫技術]
[作業系統][嘉賓聊天·線上訪談][活動集錦]
[精彩專題][Symantec專區][訂閱IT技術週刊]
[開發論壇][網管論壇][安全論壇][數據庫論壇]
[作業系統論壇][Sybase專區][IBM dW技術專區]
[病毒求助][病毒與漏洞播報][文檔·源碼下載]

另類解讀SQL Server中的DateTime數據類型

發佈時間:2008.07.16 04:41     來源:賽迪網    作者:安娜

【賽迪網-IT技術報道】看到這個標題,你我可能都笑了。你會笑,因為你以為這個東西太小兒科了,還用得著做一個標題?!我會笑,是因為我確信你看完後會改變你的想法。

首先我引入一個問題:如何與一個DateTime類型的字段值進行相等比較?

其實這個問題看起來容易,但有下面的問題存在:

1、一般來說,用戶輸入的日期值就是yyyy/mm/dd,不帶時、分、秒;

2、數據庫中存儲的日期值是帶時、分、秒的。

所以我必須假定:我們所謂的兩個日期相等就是年、月、日相等。

兩種方法:

◆1、有了這樣的假定,你我都會有這樣的想法:把兩個日期的年、月、日取出來分別比較就行了,三者相等即可(也可按統一格式做成一個串再比較)。

◆2、上面的方法雖然可行。但你會發現幾乎把日期函數用了個遍!不妨按下面的思路想一下:如果只指定日期,則時間默認為 12:00 AM(午夜)(取自:SQL Server連線幫助)。假定我們要查的日期是2004/7/10,則其實我們想要的就是這一天的00:00:00至23:59:59之間的。提到之間,我們就會想到between...and!!只要 between 2004/7/10 and 2004/7/11 即可了。具體地說:between Cast('2004-7-10' as DateTime) and dateadd(day, 1, Cast('2004-7-10' as DateTime))。但這個方法有一個小小問題,它會把7/11 0點的東西也找到,而這其實不應算做7/10的。如果你還想精益求精的話,就只能用...>=... and ...<... 了。(一般情況下沒有必要)

等於討論完後,再想想大於(或小于)某個日期,我們自然可以還用 between ... and 的,再一次論證上面方法的通用性。

注意:有了上面的討論,你一定明白了,and 後的日期一定要加一天,否則結束日期就不會查到了。(責任編輯:盧兆林)


[ 發表評論 ] 字體[  ] [ 列印 ] [ 進入博客 ] [ 進入論壇 ]  [ 推薦給朋友 ]
  相關文章
· SQL觸發器在保持數據庫完整性中的實際應用 (07-10) · SQL觸發器在保持數據庫完整性中的實際應用 (07-10)
· SQL Server中選出指定範圍行的SQL語句寫法 (07-10) · SQL Server導出表到EXCEL文件的存儲過程 (07-10)
· 講解SQL Server海量數據導入的最快方法 (07-09) · 講解Microsoft SQL Server的行式觸發器 (07-09)
· Microsoft SQL Server本機Web服務使用方案 (07-08) · SQL Server平臺上數據倉庫管理員的關鍵任務 (06-25)
· SQL Server平臺上數據倉庫管理員的關鍵任務 (06-25) · 個人經驗總結:SQL Server數據庫的鎖類型 (06-24)
  客戶需求反饋表
* 姓  名:
更多資料  了解方案  認識廠商
* 單位名稱:
* 聯繫電話:
* 電子郵件:
  賽迪推薦  
  手機·資費 ·新品·導購·評測·手機資費·寬帶
手機搜索  諾基亞 N73 MOTO Z6
  IT產品 ·筆記本·臺式機·伺服器·列印·投影
IT產品搜索 
  IT技術 ·開發·網管·安全·數據庫·作業系統
  資訊化 ·熱點·專題·訪談·週刊·方案案例
· 網站建設市場重新洗牌 一卡通引領革命潮流
· 北京加快資訊化建設 醫保一卡通年底前啟動
· ERP案例分析 SaaS帶來衝擊 IT服務商面臨挑戰
· 通方期貨CRM解決方案 房地產行業CRM解決方案
  IT博客 ·曾劍秋·項立剛·Java學習·網管
  IT技術論壇 ·開發·網管·安全·數據庫·系統