SQL SERVER中强制类型转换cast和convert的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER中强制类型转换cast和convert的区别相关的知识,希望对你有一定的参考价值。

参考技术A 几乎一样,但是convert比cast多了个style
可以让转换结果变成指定的显示样式
以下是网上找到的参考资料
sql中的cast
和convert都是用来将一种数据类型的表达式转换为另一种数据类型的表达式。cast

convert
提供相似的功能,只是语法不同。在时间转化中一般用到convert,因为它比cast多加了一个style,可以转化成不同时间的格式。
一、语法:
1、使用
cast
  cast
(
expression
as
data_type
)
2、使用
convert
  convert
(data_type[(length)],
expression
[,
style])
3、参数说明
  expression
  是任何有效的表达式。
  data_type:
  目标系统所提供的数据类型,包括
bigint

sql_variant。不能使用用户定义的数据类型。
  length
  nchar、nvarchar、char、varchar、binary

varbinary
数据类型的可选参数。
  style
  日期格式样式,借以将
datetime

smalldatetime
数据转换为字符数据(nchar、nvarchar、char、varchar、nchar

nvarchar
数据类型);或者字符串格式样式,借以将
float、real、money

smallmoney
数据转换为字符数据(nchar、nvarchar、char、varchar、nchar

nvarchar
数据类型)。
二、cast和convert的代码示例
sql
代码
复制
select
cast('123'
as
int)
--
123
select
convert(int,
'123')
--
123
select
cast(123.4
as
int)
--
123
select
convert(int,
123.4)
--
123
select
cast('123.4'
as
int)
select
convert(int,
'123.4')
--
conversion
failed
when
converting
the
varchar
value
'123.4'
to
data
type
int.
select
cast('123.4'
as
decimal)
--
123
select
convert(decimal,
'123.4')
--
123
select
cast('123.4'
as
decimal(9,2))
--
123.40
select
convert(decimal(9,2),
'123.4')
--
123.40
declare
@num
money
set
@num
=
1234.56
select
convert(varchar(20),
@num,
0)
--
1234.56
select
convert(varchar(20),
@num,
1)
--
1,234.56
select
convert(varchar(20),
@num,
2)
--
1234.5600
三、convert函数的style参数说明
1、date

time
样式
不带世纪数位
(yy)
带世纪数位
(yyyy)
输入/输出
-
0

100
mon
dd
yyyy
hh:miam(或
pm)
1
101
1
=
mm/dd/yy
101
=
mm/dd/yyyy
2
102
2
=
yy.mm.dd
102
=
yyyy.mm.dd
3
103
3
=
dd/mm/yy
103
=
dd/mm/yyyy
4
104
4
=
dd.mm.yy
104
=
dd.mm.yyyy
5
105
5
=
dd-mm-yy
105
=
dd-mm-yyyy
6
106
6
=
dd
mon
yy
106
=
dd
mon
yyyy
7
107
7
=
mon
dd,
yy
107
=
mon
dd,
yyyy
8
108
hh:mi:ss
-
9

109
mon
dd
yyyy
hh:mi:ss:mmmam(或
pm)
10
110
10
=
mm-dd-yy
110
=
mm-dd-yyyy
11
111
11
=
yy/mm/dd
111
=
yyyy/mm/dd
12
112
12
=
yymmdd
112
=
yyyymmdd
-
13

113
dd
mon
yyyy
hh:mi:ss:mmm(24h)
14
114
dd
mon
yyyy
hh:mi:ss:mmm(24h)
-
20

120
yyyy-mm-dd
hh:mi:ss(24h)
-
21

121
yyyy-mm-dd
hh:mi:ss.mmm(24h)
-
126
yyyy-mm-ddthh:mi:ss.mmm(无空格)
-
127
yyyy-mm-ddthh:mi:ss.mmmz(无空格)
-
130
dd
mon
yyyy
hh:mi:ss:mmmam
-
131
dd/mm/yyyy
hh:mi:ss:mmmam
2、float

real
样式

输出
0(默认值)
最多包含
6
位。
根据需要使用科学记数法。
1
始终为
8
位值。
始终使用科学记数法。
2
始终为
16
位值。
始终使用科学记数法。
3、money

smallmoney
样式

输出
0
小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如
4235.98。
1
小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如
3,510.92。
2
小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如
3,510.92。
126
转换为
char(n)

varchar(n)
时,等同于样式
2

以上是关于SQL SERVER中强制类型转换cast和convert的区别的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER中强制类型转换cast和convert的区别

SQL SERVER中强制类型转换cast和convert的区别

SQL SERVER中强制类型转换cast和convert的区别

C++的类型转换:static_castdynamic_castreinterpret_cast和const_cast(dynamic_cast还支持交叉转换,const_cast将一个类的con

C++中的数据类型强制转换

SQL Server 数据类型转换函数