我有这样的疑问:
select RIGHT(REPLICATE('0',10)+CAST(Productid as VARCHAR(10)),10) as haha
from [Production].[Product]
如果我将VARCHAR(10)
更改为CHAR(10)
,则结果的长度为3而不是10?
为什么?
答案 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
注意 :LEN
与RIGHT
的行为方式不同,并且在计算长度时不考虑尾随空格
SELECT LEN(CAST(123 as CHAR(10))), LEN(CAST(123 as VARCHAR(10)))
两者都导致长度为3。
3 3