ltrim或rtrim对空格字符串的结果是什么?

时间:2017-09-07 15:13:11

标签: sql tsql

示例:

 SELECT 'A' + ltrim('    ') + 'B'  --or SELECT 'A' + rtrim('    ') + 'B'

输出:

AB

那么修剪空格字符串后的实际字符是什么?根据该文档,结果类型可以是varcharnvarchar,因此它不能是NULL,当然如果是NULL,则不会输出AB {1}}。由于AB之间没有任何内容,因此不是空格和NULL,实际输出是什么,或者相应的varchar或{{1}是什么那个缺少的角色?任何ASCII都反映了这个?

更新

运行后:

nvarchar

结果为select ASCII(rtrim(' ')) ,但为什么NULL + A + NULL会输出B而不是AB

谢谢:)

1 个答案:

答案 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))