我有一个列名,它是一个 varchar
我想过滤名称为空字符串的所有结果...
select name
from tblNames
where name <> ''
我想做的是:
select name
from tblNames
where Ltrim(RTrim(name)) <> ''
我想在 where 子句中对名称进行修剪,但我已经阅读了几篇文章,其中提到了 where 子句中函数的性能问题
我想在不影响性能的情况下解决这个问题
我有一个列名,它是一个 varchar
我想过滤名称为空字符串的所有结果...
select name
from tblNames
where name <> ''
我想做的是:
select name
from tblNames
where Ltrim(RTrim(name)) <> ''
我想在 where 子句中对名称进行修剪,但我已经阅读了几篇文章,其中提到了 where 子句中函数的性能问题
我想在不影响性能的情况下解决这个问题
SQL-Server 中的标准行为是
' ' = ''
是TRUE
,因为尾随空格被忽略。来自MSDN 支持:
SQL Server 遵循关于如何比较字符串和空格的 ANSI/ISO SQL-92 规范(第 8.2 节,一般规则 #3)。ANSI 标准要求对比较中使用的字符串进行填充,以便它们的长度在比较之前匹配。填充直接影响
WHERE
和HAVING
子句谓词和其他 Transact-SQL 字符串比较的语义。例如,Transact-SQL 认为字符串'abc'
和对于大多数比较操作'abc '
是等效的。此规则的唯一例外是
LIKE
谓词。...
因此,您的条件WHERE name <> ''
应该可以正常工作,并且不包括任何只有空格的字符串。
您可以做出一个约束,只允许修剪后的数据进入该字段。
你可以在LTRIM(RTRIM(name))
. SQL 可能足够聪明来使用它。
您可以创建一个计算字段,即LTRIM(RTRIM(name))
索引该字段,然后在查询中使用该字段。
尽管
'abc' = 'abc '
(等式右侧的字符串后有空格)是TRUE
'abc' = ' abc'
(等式右侧的字符串前有空格)是FALSE
.
因此,自动忽略的只是尾随空格(类似RTRIM
但不类似LTRIM
)。