?? 如何用sql查詢日期型字段.txt
字號:
如何用SQL查詢日期型字段?
我在寫一個“通用數據庫查詢系統”時,需要用SQL對一個日期型字段進行查詢,突然發現Delphi沒有日期型變量,在Foxpro中一對大括號{}就表示這是個日期型變量,而在Delphi中我竟然不知道如何表示。羞愧之余,到處找資料、查信息。
先是看到在Delphi FAQ中言之鑿鑿地說可以用:where aDate:=#01/01/99#或是 where aDate:=“01/01/99”來查找,趕緊試一下,報語法錯;后又在Delphi Chat中看到一位朋友說可以用如下語句來查找:where aDate:=Cast(‘01/01/99’ as Date);又連忙試一下,哈,沒有出錯了,而且有返回的記錄,哈哈哈……,還沒笑完,眼睛隨便瞟了一眼結果就笑不出來了,因為結果完全不對,查出的結果的日期全為0000-00-00,這是怎么回事?趕快查SQL語言的書,說Cast是用來進行類型轉換的,如果類型轉換不正確的話并不會提示出錯,而是返回一個無效值。看來,我就是碰到了類型轉換不正確。拍了半天腦袋,靈機一動,是不是日期類型的格式不對,查看了一下Delphi顯示的數據庫中的日期型字段,發現它的格式是1999-9-20,我用的SQL語句是:where aDate:=Cast(‘99-9-20’ as Date);應該不會錯,可是它的返回結果如何解釋呢?為什么別人都可以正確運行,而我就是不行呢?實在沒辦法了,抱著死馬當活馬治的心情,調出WIN98的控制面板中區域設置,選中“日期”頁,將其日期分隔符由“-”改為“/”,然后再來試運行:select * from aDataBase where aDate:=Cast(‘09/20/99’ as Date);哈哈,出來結果了,而且完全正確,我簡直笑得涕淚橫流。鬧了半天,原來只是一個小小的日期分隔符在做怪。
通過進一步試驗,發現不管系統的短日期格式設成怎樣,SQL語句都必須寫成where aDate:=Cast(‘09/20/99’ as Date),為什么呢?嘿嘿,我也不知道!
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -