在 mysql 操作中我們經(jīng)常需要對(duì)數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,此時(shí)我們應(yīng)該使用的是cast()或convert()。兩者的對(duì)比:
相同點(diǎn):都是進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,實(shí)現(xiàn)的功能基本等同。
不同點(diǎn):兩者的語法不同,cast(value as type) 、 convert(value,type)
一、語法
1、使用 CAST:CAST ( expression AS data_type )
2、使用 CONVERT:CONVERT (data_type[(length)], expression [, style])
3、參數(shù)說明:
(1)expression:是任何有效的表達(dá)式。
(2)data_type:目標(biāo)系統(tǒng)所提供的數(shù)據(jù)類型,包括 bigint 和 sql_variant。不能使用用戶定義的數(shù)據(jù)類型。
(3)length:nchar、nvarchar、char、varchar、binary 或 varbinary 數(shù)據(jù)類型的可選參數(shù)。
(4)style:日期格式樣式,借以將 datetime 或 smalldatetime 數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型);或者字符串格式樣式,借以將 float、real、money 或 smallmoney 數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型)。
二、cast和convert的代碼示例
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
三、SQL中CAST和CONVERT用在時(shí)間轉(zhuǎn)換上的區(qū)別
cast 和 convert 都是用來轉(zhuǎn)化數(shù)據(jù)類型的,功能上是差不多的。
在時(shí)間轉(zhuǎn)化中一般用到 convert,因?yàn)樗?cast 多加了一個(gè) style,可以轉(zhuǎn)化成不同時(shí)間的。打個(gè)簡單的例子吧,比方說查找一下當(dāng)前的時(shí)間,select getdate(),而我們只需要到年月日而已,這時(shí)我們就可以把它轉(zhuǎn)化為 select convert(varchar(100),GETDATE(),111) 轉(zhuǎn)化成我們需要的,而 select CAST(GETDATE() as varchar(30)) cast 就沒辦法或者是轉(zhuǎn)化過程比較繁瑣。
convert 時(shí)間后面的 style 值不同產(chǎn)生的時(shí)間格式也不一樣,具體可參看網(wǎng)站http://www.w3school.com.cn/sql/func_convert.asp
本文摘自 :https://www.cnblogs.com/