一般来说,转换函数大家并不陌生。就是使用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值,这样纸在某些场景还是可以省下不少功夫。还是比较推荐使用的~
哦~补充一句,祝各位新年快乐~添丁发财