Sql Server - 在where子句中执行RTRIM/LTRIM的替代方法

abb*_*bas 5 sql sql-server performance trim

我有一个varchar的列名

我想过滤名称为空字符串的所有结果...

 select name 
 from tblNames
 where name <> ''
Run Code Online (Sandbox Code Playgroud)

我想做的是:

 select name 
 from tblNames
 where Ltrim(RTrim(name)) <> ''
Run Code Online (Sandbox Code Playgroud)

我想在where子句中对名称应用trim,但我已经阅读了一些文章,提到了where子句中函数的性能问题

我希望在不损害性能的情况下解决这个问题

ype*_*eᵀᴹ 13

SQL-Server中的标准行为是

'      ' = ''
Run Code Online (Sandbox Code Playgroud)

TRUE,因为尾随空格被忽略.从MSDN支持:

SQL Server遵循ANSI/ISO SQL-92规范(第8.2节,一般规则#3)关于如何比较字符串和空格.ANSI标准要求对比较中使用的字符串进行填充,以便在比较它们之前使它们的长度匹配.填充直接影响WHEREHAVING子句谓词以及其他Transact-SQL字符串比较的语义.例如,Transact-SQL会考虑字符串,'abc'并且对于大多数比较操作来说'abc '都是等效的.

这个规则的唯一例外是LIKE谓词....

因此,您的情况WHERE name <> ''应该正常,并且不包括任何只有空格的字符串.