LEN()函数内部是否应用TRIM()?

时间:2014-04-24 15:45:15

标签: sql sql-server

在计算字符串长度之前,在SQL LEN()函数内部TRIM()调用数据?

示例:

DECLARE @a VARCHAR(MAX), @b VARCHAR(MAX)
SET @a = '12345 '
SET @b = '12345 7'

SELECT @a, LEN(@a)
-- 12345    5

SELECT @b, LEN(@b)
-- 12345 7  7

@a@b都有7个字符。 @a最后有5个数字字符和两个空格。

从结果窗口复制两个结果时,我可以看到两个变量的长度都是7个字符。但是当试图使用LEN()找到变量的长度时,它会有所不同。将数据存储在具有varchar列的表中时会发生同样的事情。

3 个答案:

答案 0 :(得分:4)

它排除尾随空白

根据LEN (Transact-SQL)

" 返回指定字符串表达式的字符数,不包括尾随空格。"

关于

的类似问题

Why does t-sql's LEN() function ignore the trailing spaces?

LEN function not including trailing spaces in SQL Server

答案 1 :(得分:0)

它没有"修剪"来源本身(意思是它不会改变它) - 但它确实排除了培训空白:

来自the documentation

  

返回指定字符串表达式的字符数,不包括尾随空格。

答案 2 :(得分:0)

LEN排除了尾随空白。

我会用

LEN(REPLACE(expr, ' ', '_'))

这应该适用于varcharnvarchar以及包含特殊unicode控制字符的字符串。在其他地方建议的DATALENGTH函数在所有情况下都不会产生正确的结果。

您也可以使用

LEN(expr + '_') - 1

但在某些情况下,结果字符串可能超过最大文本长度。