最近在做機房收費系統時發現一個很怪異的問題,就是隻要設計日期或者時間的查詢就會出錯,不是查不出來,而且查出的結果總是“不按套路出牌”。
各種調試代碼都沒有問題,最後發現是資料庫中資料類型的問題,我把時間和日期的資料類型都設定為了Char型,結果在比較的時候他們比較的ASCII碼的大小,是以才會造成“不按套路出牌”的結果。然後我就直接去資料庫中修改資料類型,結果發現我用的SQL2005裡面隻有一個DateTime資料類型,而沒有分開的Date和Time類型。可我卻需要将時間和日期分開顯示,這裡就用到一個函數:CONVERT()。
下面我們詳細的說一下這個函數。
SQL Server裡面給它的定義是:是把日期轉換為新資料類型的通用函數,可以用不同的格式顯示日期/時間資料。
文法格式:CONVERT(data_type(length),data_to_be_converted,style)
參數解釋:data_type(length) 規定目标資料類型(帶有可選的度)。data_to_be_converted 含有需要轉換的值。style 規定日期/時間的輸出格式。
其中可用的Style值有:
Style ID | Style 格式 |
100 或者 0 | mon dd yyyy hh:miAM (或者 PM) |
101 | mm/dd/yy |
102 | yy.mm.dd |
103 | dd/mm/yy |
104 | dd.mm.yy |
105 | dd-mm-yy |
106 | dd mon yy |
107 | Mon dd, yy |
108 | hh:mm:ss |
109 或者 9 | mon dd yyyy hh:mi:ss:mmmAM(或者 PM) |
110 | mm-dd-yy |
111 | yy/mm/dd |
112 | yymmdd |
113 或者 13 | dd mon yyyy hh:mm:ss:mmm(24h) |
114 | hh:mi:ss:mmm(24h) |
120 或者 20 | yyyy-mm-dd hh:mi:ss(24h) |
121 或者 21 | yyyy-mm-dd hh:mi:ss.mmm(24h) |
126 | yyyy-mm-ddThh:mm:ss.mmm(沒有空格) |
130 | dd mon yyyy hh:mi:ss:mmmAM |
131 | dd/mm/yy hh:mi:ss:mmmAM |
舉兩個剛用的例子:一般Select getdate() 得到的時間是:2012-10-27 14:44:50.360
select convert(varchar(10), getdate(),120) 得到的是2012-10-27
select convert(char(8),getdate(),108) 得到的是時間 14:44:50
select datepart(year,getdate()) 隻有年份 2012
同時還有一些其他的時間函數,比如:datediff,Datepart ,datename等。