一般來說,轉換函數大家並不陌生。就是使用cast 和 convert 進行數據類型的轉換來達到表達式的比較,語句的拼接等效果。 使用倒是很容易的。一般情況下這樣使用就可以了。 SELECT CONVERT(INT,'123') SELECT CAST('123' AS INT) 還有一個比較少用的,
一般來說,轉換函數大家並不陌生。就是使用cast 和 convert 進行數據類型的轉換來達到表達式的比較,語句的拼接等效果。
使用倒是很容易的。一般情況下這樣使用就可以了。
SELECT CONVERT(INT,'123') SELECT CAST('123' AS INT)
還有一個比較少用的,parse 函數。(PARSE 僅用於從字元串轉換為日期/時間和數字類型。 對於一般的類型轉換,請繼續使用 CAST 或 CONVERT。 請記住,分析字元串值會帶來一定的性能開銷,這句是文檔裡面直接抄下來的)
既然有了 Convert 和 Cast ,為什麼還需要一個 parse 函數呢?比如說有下麵一種情況,我們一看就知道是2016年1月1日,但是使用Convert 和cast 就會報轉換失敗了,因為無法直接轉換成對應的日期格式。那麼這時候就要使用 parse 函數就可以了~然而parse 函數雖然方便,但是一般情況下並不推薦使用,因為使用parse函數設計到裡面的字元分析,會帶來性能開銷
(Parse函數的說明 https://msdn.microsoft.com/zh-cn/library/hh213316(v=sql.120).aspx)
SELECT CONVERT(DATETIME,'2016年1月1日') SELECT CAST('2016年1月1日' AS DATETIME) SELECT CONVERT(DATETIME,'2016Jan01') SELECT CAST('2016Jan01' AS DATETIME)
SELECT PARSE('01Jan2016' AS DATETIME USING 'en-US') SELECT PARSE('2016Jan01' AS DATETIME USING 'en-US') SELECT PARSE('2016年1月1日' AS DATETIME USING 'zh-CN') ----------------------- 2016-01-01 00:00:00.000 ----------------------- 2016-01-01 00:00:00.000 ----------------------- 2016-01-01 00:00:00.000
然而雖然有了轉換的函數,但是有時候轉換失敗的時候還是會比較蛋疼的。比方說有時候一般來說我知道這列是一個varchar(50),但是裡面全部存儲的都是錢,那我就信心滿滿的使用一個
select convert(money , Column1) from table
這樣的語句,殊不知裡面其中有一條數據寫著 100CNY 那這個轉換函數就死翹翹了。要不你就只能做類似的判斷來防止了。
select case when ISNUMERIC(Column1) = 1 THEN convert(MONEY , Column1) ELSE NULL END FROM Table
而到了2012以上的版本,Sql Server 支持了使用
Try_Convert()
Try_Cast()
Try_Parse()
3種函數,用法和 Convert,Cast ,Parse 一致,不一樣的地方在於,如果轉換失敗並不會拋錯,只會返回Null值,這樣紙在某些場景還是可以省下不少功夫。還是比較推薦使用的~
哦~補充一句,祝各位新年快樂~添丁發財