码迷,mamicode.com
首页 > 其他好文 > 详细

转换函数

时间:2016-02-13 12:14:13      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

一般来说,转换函数大家并不陌生。就是使用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值,这样纸在某些场景还是可以省下不少功夫。还是比较推荐使用的~

哦~补充一句,祝各位新年快乐~添丁发财

 

转换函数

标签:

原文地址:http://www.cnblogs.com/Gin-23333/p/5187499.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!