改变数据类型导致改变结果
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
我有这样的疑问:
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