对简单类型转换,CAST()函数和CONVERT()函数的效果一致,只是语法不同。前者更易使用,而后者的优势是格式化时间和数值。在以下这几种情况,二者一样:
1-1.SELECT CONVERT(decimal(5,2), '123.477') ==>123.48
1-2.SELECT CONVERT(decimal, '123.477') ==>123
1-3.SELECT CONVERT(int, '123')+3 ==>126
1-4.SELECT CONVERT(varchar(4), 'hello') ==>'hell'
2-1.SELECT CAST('123' AS int) ==>123
2-2.SELECT CAST('123.477' AS decimal)+3 ==>126
2-3.SELECT CAST('123.477' AS decimal(9,2)) ==>123.48
2-4.SELECT CAST('hello' AS varchar(4)) ==>'hell'
提问:SELECT CONVERT(int, '123.477') 和 SELECT CAST('123.477' AS int) 的写法对不?
回答:不对,会报错。因为CAST()函数和CONVERT()函数都不能执行四舍五入或截断操作,所以要把int换成decimal,就像1-2 和 2-2 一样。
语法总结:CAST (expression AS data_type)
CONVERT(data_type(length),data_to_be_converted,style) <style是可选参数,上面的例子就没有用到>
convert一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候常用到。
如:
SELECT GETDATE() ==>2014-05-04 17:51:53.393
SELECT CONVERT(VARCHAR(19),GETDATE()) ==>05 4 2014 5:51PM
SELECT CONVERT(VARCHAR(10),GETDATE(),110) ==>05-04-2014
其中,style的对照表如下:
Style ID | Style 格式 |
---|---|
100 或者 0 | mon dd yyyy hh:miAM (或者 PM) |
101 | mm/dd/yy |
102 | yy.mm.dd |
103 | dd/mm/yy |
104 | dd.mm.yy |
105 | dd-mm-yy |
106 | dd mon yy |
107 | Mon dd, yy |
108 | hh:mm:ss |
109 或者 9 | mon dd yyyy hh:mi:ss:mmmAM(或者 PM) |
110 | mm-dd-yy |
111 | yy/mm/dd |
112 | yymmdd |
113 或者 13 | dd mon yyyy hh:mm:ss:mmm(24h) |
114 | hh:mi:ss:mmm(24h) |
120 或者 20 | yyyy-mm-dd hh:mi:ss(24h) |
121 或者 21 | yyyy-mm-dd hh:mi:ss.mmm(24h) |
126 | yyyy-mm-ddThh:mm:ss.mmm(没有空格) |
130 | dd mon yyyy hh:mi:ss:mmmAM |
131 | dd/mm/yy hh:mi:ss:mmmAM |
运用:如:select name,shool,address,convert(Varchar(10),age)+'岁' from Table_student
总之,这两个函数在一些数据库里面,经常见到高手用的,看情况选择函数吧~