资源描述
知识点1、Cast 和 Convert 区别
SQL中的cast和convert都是用来将一种数据类型的表达式转换为另一种数据类型的表达式。 CAST和CONVERT提供相似的功能,只是语法不同。在时间转化中一般用到convert,因为它 比cast多加了一个style,可以转化成不同时间的格式。
结果1 Jj消息1
1数值1
1£ 123
select CONVERT(int , 123.4) as 数值2
2结果1 消息1
!数值2
4、字符串(精度值)转换为整型select CASTC 123.4' as int) as 数值 1
3结果
J消息|
1
消息245,级别1
6,状态1,第1行
在将varchar值’123.4,转换成数据类型int时失败。
select CONVERT(int , '123.4') as 数值2在将varchar值’123. V转换成数据类型int时失败。
3结果
J消息|
1
消息245,级别1
6,状态1,第1行
5、字符串(精度值)转换为精度值(不带小数位)select CAST(* 123.4, as decimal) as 数值 1
□结果l J消息1
1数值1
1|| 123
select CONVERT(decimal , '123.4') as 数值2
口结果| J消息|
6、字符串(精度值)转换为精度值(带小数位)
7、convert函数的style参数
7.1 money 和 smallmoney 样式
值
输出
0
小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如4235.98。
1
小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如3,510.92。
2
小数点左侧每三位数字之间以逗号分隔,小数点右侧取四位数,例如3,510.9200“
126
转换为char(n)或varchar(n)时,等同于样式2
declare ©Num moneyset @Num = 1234
select CONVERT(varchar (20) , @Num , 0) as 数值 1declare @Num money
数值1
1
| 1234.00
set CNum = 1234select CONVERT(varchar (20) , @Num , 1) as 数值2
J结果1 J消息1
|数值2
11] 1,234.00
declare @Num money
set @Num = 1234select CONVERT(varchar (20) , ©Num , 2) as 数值3
◎结果|因消息|
数值3
J
i 1234.0000
:
declare ©Num moneyset ©Num 二 1234
select CONVERT(varchar (20) , CNum , 126) as 数值4消息 |
数值4
J
! 1234. 0000
7.2 float 和 real 样式备注:科学记数法,用慕的形式,有时可以方便的表示日常生活中遇到的一些较大的数。 例如:1.03乘10的8次方,可简写为“1.03E+08”的形式。
值
输出
0
默认值,最多包含6位。根据需要使用科学记数法。
1
始终为8位值。始终使用科学记数法。
2
始终为16位值。始终使用科学记数法。
-当style数值为0时,小数点左侧数字没有超过6位数,不会按科学记数法格式显示declare @Num float
set @Num = 1231.5678
一。是默认值,style位不填写,就默认显示6个数字,CONVERT(varchar(50),稣um)这个写法也 可以select CONVERT(varchar (50) , @Num , 0) as 数值 1
口结果|心消息|
数值1
J
1 1231.57
-当style数值为0时,小数点左侧数字超过6位数,按科学记数法显示 declare @Num floatset ©Num = 123456789. 56
select CONVERT(varchar(50) , ©Num , 0) as 数值2
m结果消息1
数值2
\
1.23457e+008
-当style数值为1时,小数点左侧数字没有限制,都会按科学记数法显示 declare @Num floatset @Num = 123. 56
select CONVERT(varchar(50),穆Num , 1) as 数值3
结果目消息|
|数值3
1£ 1.23560005002
-当style数值为2时,小数点左侧数字没有限制,都会按科学记数法显示 declare ©Num floatset @Num 二 123. 56
select CONVERT(varchar(50) , @Num , 2) as 数值4
结果| 消息1
|数值4
1 |j 1.235600000000000e+002
7.3 date 和 time 样式
不带世纪位(yy)
带世纪位(yyyy)
输入(左侧数值)/输出(右侧格式)
-
0 或 100
mon dd yyyy hh:miAM (或 PM)
1
101
1 = mm/dd/yy
101 = mm/dd/yyyy
2
102
3
103
3 = dd/mm/yy
103 = dd/mm/yyyy
4
104
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
select getdateO as 当前系统 D 期
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
II = yy/mm/dd
III = 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
二结果| -5消息|
当前系统日期
J
1 2018-09-20 01:39:34.823
I
select convert(varchar(50) , getdate() , 108) as 当前系统时间
结果1 □消息1
1
当前系统时间
1 1
! 01:41:40
一常用语法select convert(varchar(50) , getdateO , 120) as 当前系统日期
园结果| Lj消息|||当前系统日期
|f 2018-09-20 01:42:108> select into数据类型转换
一数值0自动转换为整型int一字符串’’自动转换为varchard),长度为1太短了,最好显式指定字符串长度
select top 1 empid , as tl , 0 as t2 into 转换表 1 from order 1 El消息I
(1行受影响)E :
J dbo. Student
E E
3 dbo. Subject
S C
J dbo. Teacher
国E
2 dbo. test
E :
j dbo. testl
s :
J dbo. test2 ■
E U
1 dbo.订单表
s :
2 dbo.学生
国r
比。.转换表i
E :
J dbo. Student
E E
3 dbo. Subject
S C
J dbo. Teacher
国E
2 dbo. test
E :
j dbo. testl
s :
J dbo. test2 ■
E U
1 dbo.订单表
s :
2 dbo.学生
国r
比。.转换表i
苹匚i视图
S LJ同义词
王匚a可编程性
E LJ Service Broker
a LJ存储
+匚3安全蚌
设计(G)
偏辑前200行(B) 编写表脚本为(S) 查看依赖关系(V)
全文索引。)
策略粉
SQLQueryl. sql —,•ministrator
WIN-5579AATH4RN---ntDB - dbo.转换表 1 X
列名I数据类型|允许Null值|
►J
\ empid
int
匠
tl
var char (1)
r
t2
int
r
r
■精度型1. 2自动转换为精度型numeric(2, 1)一自动转换的精度型最好实际指定K度 select top 1 empid , '' as 11 , 1.2 as t2 into 转换表5 from orderl
-显式指定字符串长度为50select top 1 empid , convert(varchar(50) , as tl , 0 as t2 into 转换表2 from orderl
*消息|
(1行受影响)I±1 s
I±1 s
dbo. t>peci all ty dbo. Student
田 口 dbo. Subject [+' dbo. Teacher 国 J dbo. test
E 3 dbo. testl E 3 dbo. test2 田_J dbo.订单表 E □ db。.学生 田□ dbo.转换表1
新建表on...
设计(G)
dbo.转换表2
孑LJ视图
> LJ同义词
迭择前1000行or)
编辑前200行(E) 编写表脚本为(S) 查看依赖关系(V)
全文索引CT)
策略(0)
WIN-5579AATH4RN-ntDB - dbo.转换表 2 x]
sql —,•ministratorj
列名
数据类型
允许Null值
►
int
17
L
tl
varchar (50)
t2
int
r
--显式指定精度型decimal (9, 2)
t2
into 转
select top 1 empid , '' as tl , convert(decimal(9 , 2) , 1.2) as 换表6 from orderl
WIN-5579AATH4RN-• • ntDB - dbo.转换表6 X 1
dbo.转}
列名
数据类型|允许Null值
►
int
tl
varchar (1)
r
E
t2
decimal (9, 2)
r
9、union all数据数据类型转换-union all连接的数值有整型和字符串,字符串隐式转换为数值型
select *
into
转换表3 from
(
select
100
as empid , ' 1' as
id
union
all
select
top
1 empid , id from
order 1 where id=123
)tl
消息I
(2行受影响)
dbo.转换表3
■6 ] union all
新建表 00. ..ect top ] E
设计(G)
+. dbo. Teacher 王三 dbo. test + 二 dbo. testl .+. dbo. test2 E 口 dbo.订单表 H dbo.学生 0 □ dbo.转换表1 E 口 dbo.转换表2 S 3
—视图迭择前1000行0¥)
编辑前200行(E) 编写表脚本为(S) 查看依赖关系(V)
列名
数据类型|
允许Null值|
int
id
int
r ~
r
SQLQueryl. sql —••ministrator (84))*WIN-5579AATH4RN-• • ntDB - dbo,转换表3 X
―观点: 验证: select
―观点: 验证: select
union all连接的数值有整型和字符串,字符串隐式转换为数值型 字符串隐式转换为数值型
100 as empid , convert(varchar(1) , ' a') as idunion
select
union
select
all
top 1 empid , id from order 1 where id=123:!结果上消息|
消息245,级别16,状态1,第1行SQLQueryl. sql —*ministr&tor (84))
SQLQueryl. sql —*ministr&tor (84))
在将varchar值'1转换成痫S类型int B寸失败。
列名
数据类型
|允许Null值|
►
int
R
id
varchar (10)
17
r
WIN-5579AATH4RN-ntDB - dbo.转换表4 X
-union all连接的数值有整型和字符串,数值型显式转换为字符型i nto
select *转换表4 from
select union select tl
100all
topas empid , convert(varchar(1) , '1') as id
1 empid , convert(varchar(10) , id) from ordcrl whereid=123
)|
Jj消息|(2行受影响)
E 王+
E+.
王 王+
dbo. Student dbo. Subject dbo. Teacher dbo. test dbo. testl dbo. test2 dbo.订单表 dbo,学生 dbo.转换表1 dbo.转换表2 dbo.转换表3
■_ 6 新建表00... 设计缶)选择前1000行(W)
偏辑前200行(E) 编写表脚本为(S) 查看依赖关系(V)全文索引CT)
dbo.转换表4策略(0)
union all
.ect top 1 empid,学习作业15布置:按本例实例练习一遍,并提交枫山
展开阅读全文