更改数据类型会导致更改结果

时间:2015-06-26 13:13:00

标签: sql-server tsql type-conversion

我有这样的疑问:

select RIGHT(REPLICATE('0',10)+CAST(Productid as VARCHAR(10)),10) as haha  
from [Production].[Product]

如果我将VARCHAR(10)更改为CHAR(10),则结果的长度为3而不是10?

为什么?

1 个答案:

答案 0 :(得分:2)

CAST Productid的{​​{1}}值123使用CAST(Productid as VARCHAR(10))时,它会被转换为可变字符类型,最后没有填充空格。

但是,如果您使用CHAR(10),则会在123的末尾填充空格,最后将为'123 '添加7个空格

因此,在使用获取RIGHT

时,您会有所不同
DECLARE @var INT = 123
SELECT RIGHT(REPLICATE('0',10)+CAST(@var as CHAR(10)),10),RIGHT(REPLICATE('0',10)+CAST(@var as VARCHAR(10)),10)

差异:

123         0000000123

注意 LENRIGHT的行为方式不同,并且在计算长度时不考虑尾随空格

SELECT LEN(CAST(123 as CHAR(10))), LEN(CAST(123 as VARCHAR(10)))

两者都导致长度为3。

3   3