【Sqlserver系列】CAST和CONVERT
1 概述
本篇文章主要讲解SqlServer中类型转换涉及的两个函数:CAST和CONVERT。
2 具体内容
2.1 CAST
(1)作用:将一种数据类型的表达式转换为另一种数据类型的表达式。
(2)定义:
- 1 CAST ( expression AS data_type)
Parameters:
expression:任何可转换为 data_type
的有效表达式;
data_type:系统提供的目标数据类型。 该类型必须为基元(标量)类型。 使用的 data_type
取决于查询空间。 如果使用EntityCommand 执行查询,则数据类型为概念模型中定义的类型。
Return Value::
返回与 data_type
相同的值。
(3)例子
- 1 SELECT CAST(\'2017\' AS INT) --2017
- 2
- 3 SELECT CAST(2017 AS INT) --2017
- 4
- 5 SELECT CAST(2017.3 AS INT) --2017
- 6
- 7 SELECT CAST(\'2017.3\' AS INT)--消息 245,级别 16,状态 1,第 1 行,在将 varchar 值 \'2017.3\' 转换成数据类型 int 时失败。
- 8
- 9 SELECT CAST(\'2017.3\' AS decimal) --2017
- 10
- 11 SELECT CAST(\'2017.3\' AS decimal(8,2)) --2017.30
2.2 CONVERT
(1)作用:将一种数据类型的表达式转换为另一种数据类型的表达式。
(2)定义:
- 1 CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Parameters:
expression:任何有效的表达式;
data_type:目标数据类型。这包括 xml、bigint 和 sql_variant。不能使用别名数据类型;
length:指定目标数据类型长度的可选整数。默认值为 30;
style:指定 CONVERT 函数如何转换 expression 的整数表达式。如果样式为 NULL,则返回 NULL。该范围是由 data_type 确定的。有关详细信息,请参阅“备注”部分;
Return Value:
返回转换为 data_type 的 expression。
(3)例子
- 1 SELECT CONVERT(INT,\'2017\') --2017
- 2
- 3 SELECT CONVERT(INT,2017.3) --2017
- 4
- 5 SELECT CONVERT(INT,\'2017.3\') --消息 245,级别 16,状态 1,第 1 行,在将 varchar 值 \'2017.3\' 转换成数据类型 int 时失败。
- 6
- 7 SELECT CONVERT(decimal,\'2017.3\') --2017
- 8
- 9 SELECT CONVERT(decimal(8,2),\'2017.3\') --2017.30
2.3 CAST和CONVERT比较
(1)cast一般更容易使用,convert的优点是可以格式化日期和数值;
(2)convert一般用于日期和时间值,小数之间转换,cast一般用于小数转数值和字符型;
(3)converk显示转换,cast是强制转换;
(4)例子
- 1 select CONVERT(varchar, getdate(), 120 ) --2017-08-13 03:56:14
- 2
- 3 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),\'-\',\'\'),\' \',\'\'),\':\',\'\') --20170813035627
- 4
- 5 select CONVERT(varchar(12) , getdate(), 111 ) --2017/08/13
- 6
- 7 select CONVERT(varchar(12) , getdate(), 112 ) --20170813
- 8
- 9 select CONVERT(varchar(12) , getdate(), 102 ) --2017.08.13
- 10
- 11 select CONVERT(varchar(12) , getdate(), 101 ) --08/13/2017
- 12
- 13 select CONVERT(varchar(12) , getdate(), 103 ) --13/08/2017
- 14
- 15 select CONVERT(varchar(12) , getdate(), 104 ) --13.08.2017
- 16
- 17 select CONVERT(varchar(12) , getdate(), 105 ) --13-08-2017
- 18
- 19 select CONVERT(varchar(12) , getdate(), 106 ) --13 08 2017
- 20
- 21 select CONVERT(varchar(12) , getdate(), 107 ) --08 13, 2017
- 22
- 23 select CONVERT(varchar(12) , getdate(), 108 ) --03:57:39
- 24
- 25 select CONVERT(varchar(12) , getdate(), 109 ) --08 13 2017
- 26
- 27 select CONVERT(varchar(12) , getdate(), 110 ) --08-13-2017
- 28
- 29 select CONVERT(varchar(12) , getdate(), 113 ) --13 08 2017 0
- 30
- 31 select CONVERT(varchar(12) , getdate(), 114 ) --03:58:08:200
- 32
- 33 select getdate() --2017-08-13 03:58:48.660
- 34
- 35 select convert(char(8),getdate(),112) --20170813
- 36
- 37 select convert(char(8),getdate(),108) --03:58:48
- 38
- 39 select convert(char(8),getdate(),112) --20170813
参考表:
3 参考文献
【01】https://msdn.microsoft.com/zh-cn/library/bb399172(v=vs.110).aspx
【02】https://technet.microsoft.com/zh-cn/library/ms187928(v=sql.105).aspx
4 版权
- 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
- 博主网址:http://www.cnblogs.com/wangjiming/。
- 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
- 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2016177728@qq.com。
- 可以转载该博客,但必须著名博客来源。