【发布时间】:2015-09-23 16:46:32
【问题描述】:
我需要从表中检索没有以某个值开头的字段的行:
我目前正在使用这样的简单查询:
SELECT A.ID FROM SCHEMA.TABLE A WHERE A.FIELD NOT LIKE 'WORD%'
但是,我了解到A.FIELD 有时会在“WORD”之前包含不同数量的空格。
显然,我可以使用另一个通配符重新编写查询,但这会使其不可分割并减慢一点(此查询在相当大的表上运行,并且需要尽可能高效)。
有什么办法可以写一个可查询的查询来解决这个问题?
【问题讨论】:
-
简单的解决方案,清理您的数据并摆脱前导空格。 SQL 不关心尾随空格,但前导空格肯定很重要。
-
@JorgeCampos 使用 LIKE 并不自动意味着不能使用索引。如果没有前导通配符索引,绝对可以使用。只有在使用前导通配符时,索引才能被使用或提供帮助。
-
@JorgeCampos 是的,你错了。在这种情况下,它可以使用索引,因为它在开头没有通配符
-
只要通配符仅在末尾,它仍然可以使用索引。您可能无法获得尖叫的快速搜索,但它至少可以使用它。想想电话簿,即使您只有某人姓氏的前 5 个字符,您也可以进一步缩小结果范围。
-
如何添加一个计算列来修剪列并在其上添加索引?
标签: sql sql-server sql-server-2014