改变数据类型导致改变结果

Changing datatype lead to change the result

我有这样的疑问:

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

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

为什么?

当您 CAST 您的 Productid 的值说 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

注意LEN 的行为方式与 RIGHT 不同,也不接受计算长度时考虑尾随空格。

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

两者的长度都是 3。

3   3