SQLServer数据类型转换函数cast()和convert()详解 SQL Server中,数据类型转换函数,常⽤的函数有cast()和convert()。
cast()和convert()函数⽐较:
(1)cast⼀般更容易使⽤,convert的优点是可以格式化⽇期和数值;
(2)convert⼀般⽤于⽇期和时间类型以及⼩数之间转换,⽽cast⼀般⽤于⼩数转数值和字符型;
(3)convert只是显⽰转换,⽽cast是强制转换。
⼀、cast()函数
cast()函数使⽤起来⾮常简单,语法为:
cast(字段名 as 转换的类型 )
如:
1select cast(123.45 as int)
2--123,将float类型转换为int类型
3
4select cast('123.447654' as int)
5--消息 245,级别 16,状态 1,第 1 ⾏,在将 varchar 值 '2017.3' 转换成数据类型 int 时失败。
6
7/*123.45为float类型,⽽'123.447654'为char类型,
8带有⼩数位数的字符串⽆法直接转化为int类型,但可以直接转化为decimal类型。
9*/
10
11select cast('123.447654' as decimal)
12--123,decimal代表只保留整数部分,不保留⼩数部分。
13
14select cast('123.447654' as decimal(5,2))
15/*123.45,将char类型转换为数值类型,5为精度,代表除⼩数点外,最长为5位;
162为⼩数位数,代表⼩数点后⾯保留两位⼩数。
17
18⽽如果写select cast('123.447654' as decimal(5,3)),transform和convert的区别
19就会报“将 varchar 转换为数据类型 numeric 时出现算术溢出”的错误。
20因为在类型转换时,会优先满⾜整数部分,⽽'123.447654'中整数部分已经有3位,
21⼩数部分最多就只能有2位,⽆法保留3位⼩数,所有会报错。
22这时候就需要提⾼精度,即将数值5增⼤。*/
23
24select cast('20210922' as date)
25--2021-09-22,将char类型转换为⽇期类型
26
27select cast(getdate() as time)
28--22:07:08.4200000,取当前的时间信息,不保留⽇期
⼆、convert()函数
语法:
convert(data_type(length),expression,style)
值描述
data_type(length)规定⽬标数据类型(带有可选的长度)。
expression规定需要转换的值。
style规定⽇期/时间的输出格式。
下⾯的表格展⽰了 datetime 或 smalldatetime 转换为字符数据的 style 值:
值(世纪 yy )值
(世纪 yyyy )输⼊/输出标准
-0 or 100mon dd yyyy hh:miAM (or PM)Default 1101mm/dd/yy dd ANSI
3103dd/mm/yy British/ German 5105dd-mm-yy Italian
6106dd mon yy 7107Mon dd, yy 8108hh:mm:ss
-9 or 109mon dd yyyy hh:mi:ss:mmmAM (or PM)Default+millisec 10110mm-dd-yy USA 11111yy/mm/dd Japan 12112yymmdd
ISO
-13 or 113dd mon yyyy hh:mi:ss:mmm (24h)14114hh:mi:ss:mmm (24h)-20 or 120yyyy-mm-dd hh:mi:ss (24h)-21 or 121yyyy-mm-dd hh: (24h)-126yyyy-mm-ddThh: (no spaces)ISO8601-130dd mon yyyy hh:mi:ss:mmmAM Hijiri -131
dd/mm/yy hh:mi:ss:mmmAM
Hijiri
如:
参考于:
1SELECT CONVERT(INT, 25.65) --252
3select CONVERT(decimal, '123.45') -- 1234
5select CONVERT(decimal(9,2), '123.45') -- 123.456
7SELECT CONVERT(VARCHAR(25),GETDATE()) --09 22 2021 10:31PM 8
9SELECT CONVERT(VARCHAR(24),GETDATE(),120)    --2021-09-22 22:32:43,最常⽤,保留⽇期时间信息10
11SELECT CONVERT(VARCHAR(10),GETDATE(),102) --2021.09.22,只保留⽇期信息12
13SELECT CONVERT(VARCHAR(10),GETDATE(),111) --2021/09/22,只保留⽇期信息14
15
SELECT CONVERT(VARCHAR(10),GETDATE(),108) --22:34:06,只保留时间信息