示例:
SELECT 'A' + ltrim(' ') + 'B' --or SELECT 'A' + rtrim(' ') + 'B'
输出:
AB
那么修剪空格字符串后的实际字符是什么?根据该文档,结果类型可以是varchar
或nvarchar
,因此它不能是NULL
,当然如果是NULL
,则不会输出AB
{1}}。由于A
和B
之间没有任何内容,因此不是空格和NULL
,实际输出是什么,或者相应的varchar
或{{1}是什么那个缺少的角色?任何ASCII都反映了这个?
更新
运行后:
nvarchar
结果为select ASCII(rtrim(' '))
,但为什么NULL
+ A
+ NULL
会输出B
而不是AB
?
谢谢:)
答案 0 :(得分:1)
ASCII函数产生空结果,而不是TRIM函数:
SELECT ASCII('')--NULL
SELECT ASCII(rtrim(' '))--NULL
SELECT rtrim(' ')--empty string
SELECT 'A' + ltrim(' ') + 'B'--'A' + empty string + 'B' = 'AB'
串联结果的数据类型现在取决于约束优先级的隐式转换:
SELECT CAST(sql_variant_property((SELECT 'A' + ltrim(' ') + 'B'),'BaseType') as varchar(20))
SELECT CAST(sql_variant_property((SELECT N'A' + ltrim(' ') + 'B'),'BaseType') as varchar(20))
SELECT CAST(sql_variant_property((SELECT 'A' + ltrim(' ') + N'B'),'BaseType') as varchar(20))
SELECT CAST(sql_variant_property((SELECT N'A' + ltrim(' ') + N'B'),'BaseType') as varchar(20))