1、知识点1、Cast 和 Convert 区别SQL中的cast和convert都是用来将一种数据类型的表达式转换为另一种数据类型的表达式。 CAST和CONVERT提供相似的功能,只是语法不同。在时间转化中一般用到convert,因为它 比cast多加了一个style,可以转化成不同时间的格式。结果1 Jj消息11数值11 123select CONVERT(int , 123.4) as 数值22结果1 消息1!数值24、字符串(精度值)转换为整型select CASTC 123.4 as int) as 数值 13结果J消息|1消息245,级别16,状态1,第1行在将varchar值123
2、.4,转换成数据类型int时失败。select CONVERT(int , 123.4) as 数值2在将varchar值123. V转换成数据类型int时失败。3结果J消息|1消息245,级别16,状态1,第1行5、字符串(精度值)转换为精度值(不带小数位)select CAST(* 123.4, as decimal) as 数值 1结果l J消息11数值11| 123select CONVERT(decimal , 123.4) as 数值2口结果| J消息|6、字符串(精度值)转换为精度值(带小数位)7、convert函数的style参数7.1 money 和 smallmoney 样
3、式值输出0小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如4235.98。1小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如3,510.92。2小数点左侧每三位数字之间以逗号分隔,小数点右侧取四位数,例如3,510.9200“126转换为char(n)或varchar(n)时,等同于样式2declare Num moneyset Num = 1234select CONVERT(varchar (20) , Num , 0) as 数值 1declare Num money数值11| 1234.00set CNum = 1234select CONVERT(varch
4、ar (20) , Num , 1) as 数值2J结果1 J消息1|数值211 1,234.00declare Num moneyset Num = 1234select CONVERT(varchar (20) , Num , 2) as 数值3结果|因消息|数值3Ji 1234.0000:declare Num moneyset Num 二 1234select CONVERT(varchar (20) , CNum , 126) as 数值4消息 |数值4J! 1234. 00007.2 float 和 real 样式备注:科学记数法,用慕的形式,有时可以方便的表示日常生活中遇到的一些
5、较大的数。 例如:1.03乘10的8次方,可简写为“1.03E+08”的形式。值输出0默认值,最多包含6位。根据需要使用科学记数法。1始终为8位值。始终使用科学记数法。2始终为16位值。始终使用科学记数法。-当style数值为0时,小数点左侧数字没有超过6位数,不会按科学记数法格式显示declare Num floatset Num = 1231.5678一。是默认值,style位不填写,就默认显示6个数字,CONVERT(varchar(50),稣um)这个写法也 可以select CONVERT(varchar (50) , Num , 0) as 数值 1口结果|心消息|数值1J1 12
6、31.57-当style数值为0时,小数点左侧数字超过6位数,按科学记数法显示 declare Num floatset Num = 123456789. 56select CONVERT(varchar(50) , Num , 0) as 数值2m结果消息1数值21.23457e+008-当style数值为1时,小数点左侧数字没有限制,都会按科学记数法显示 declare Num floatset Num = 123. 56select CONVERT(varchar(50),穆Num , 1) as 数值3结果目消息|数值31 1.23560005002-当style数值为2时,小数点左侧
7、数字没有限制,都会按科学记数法显示 declare Num floatset Num 二 123. 56select CONVERT(varchar(50) , Num , 2) as 数值4结果| 消息1|数值41 |j 1.235600000000000e+0027.3 date 和 time 样式不带世纪位(yy)带世纪位(yyyy)输入(左侧数值)/输出(右侧格式)-0 或 100mon dd yyyy hh:miAM (或 PM)11011 = mm/dd/yy101 = mm/dd/yyyy210231033 = dd/mm/yy103 = dd/mm/yyyy410451055
8、= dd-mm-yy105 = dd-mm-yyyy61066 = dd mon yy106 = dd mon yyyy71077 = Mon dd, yy107 = Mon dd, yyyyselect getdateO as 当前系统 D 期8108hh:mi:ss-9 或 109mon dd yyyy hh:mi:ss:mmmAM (或 PM)1011010 = mm-dd-yy110 = mm-dd-yyyy11111II = yy/mm/ddIII = yyyy/mm/dd1211212 = yymmdd112 = yyyymmdd-13 或 113dd mon yyyy hh:mi
9、:ss:mmm(24h)14114dd mon yyyy hh:mi:ss:mmm(24h)20 或 120yyyy-mm-dd hh:mi:ss(24h)21 或 121yyyy-mm-dd hh:mi:ss.mmm(24h)126yyyy-mm-ddThh:mi:ss.mmm (无空格)127yyyy-mm-ddThh:mi:ss.mmmZ (无空格)130dd mon yyyy hh:mi:ss:mmmAM131dd/mm/yyyy hh:mi:ss:mmmAM二结果| -5消息|当前系统日期J1 2018-09-20 01:39:34.823Iselect convert(varcha
10、r(50) , getdate() , 108) as 当前系统时间结果1 消息11当前系统时间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行受影
11、响)E :J dbo. StudentE E3 dbo. SubjectS CJ dbo. Teacher国E2 dbo. testE :j dbo. testls :J dbo. test2 E U1 dbo.订单表s :2 dbo.学生国r比。.转换表iE :J dbo. StudentE E3 dbo. SubjectS CJ dbo. Teacher国E2 dbo. testE :j dbo. testls :J dbo. test2 E U1 dbo.订单表s :2 dbo.学生国r比。.转换表i苹匚i视图S LJ同义词王匚a可编程性E LJ Service Brokera LJ存储
12、+匚3安全蚌设计(G)偏辑前200行(B) 编写表脚本为(S) 查看依赖关系(V)全文索引。)策略粉SQLQueryl. sql ,ministratorWIN-5579AATH4RN-ntDB - dbo.转换表 1 X列名I数据类型|允许Null值|J empidint匠tlvar char (1)rt2intrr精度型1. 2自动转换为精度型numeric(2, 1)一自动转换的精度型最好实际指定K度 select top 1 empid , as 11 , 1.2 as t2 into 转换表5 from orderl-显式指定字符串长度为50select top 1 empid ,
13、convert(varchar(50) , as tl , 0 as t2 into 转换表2 from orderl*消息|(1行受影响)I1 sI1 sdbo. tpeci all ty dbo. Student田 口 dbo. Subject + dbo. Teacher 国 J dbo. testE 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
14、-5579AATH4RN-ntDB - dbo.转换表 2 xsql ,ministratorj列名数据类型允许Null值int17Ltlvarchar (50)t2intr-显式指定精度型decimal (9, 2)t2into 转select top 1 empid , as tl , convert(decimal(9 , 2) , 1.2) as 换表6 from orderlWIN-5579AATH4RN- ntDB - dbo.转换表6 X 1dbo.转列名数据类型|允许Null值inttlvarchar (1)rEt2decimal (9, 2)r9、union all数据数据类
15、型转换-union all连接的数值有整型和字符串,字符串隐式转换为数值型select *into转换表3 from(select100as empid , 1 asidunionallselecttop1 empid , id fromorder 1 where id=123)tl消息I(2行受影响)dbo.转换表36 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
16、3视图迭择前1000行0)编辑前200行(E) 编写表脚本为(S) 查看依赖关系(V)列名数据类型|允许Null值|intidintr rSQLQueryl. sql ministrator (84)*WIN-5579AATH4RN- ntDB - dbo,转换表3 X观点: 验证: select观点: 验证: selectunion all连接的数值有整型和字符串,字符串隐式转换为数值型 字符串隐式转换为数值型100 as empid , convert(varchar(1) , a) as idunionselectunionselectalltop 1 empid , id from o
17、rder 1 where id=123:!结果上消息|消息245,级别16,状态1,第1行SQLQueryl. sql *ministr&tor (84)SQLQueryl. sql *ministr&tor (84)在将varchar值1转换成痫S类型int B寸失败。列名数据类型|允许Null值|intRidvarchar (10)17rWIN-5579AATH4RN-ntDB - dbo.转换表4 X-union all连接的数值有整型和字符串,数值型显式转换为字符型i ntoselect *转换表4 fromselect union select tl100alltopas empid
18、 , convert(varchar(1) , 1) as id1 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布置:按本例实例练习一遍,并提交枫山