如何才能使此查询具有可搜索性?

Man*_*eld 6 sql sql-server sql-server-2014

我需要从我的表中检索行,而不是以某个值开头的字段:

我目前正在使用这样的简单查询:

SELECT A.ID FROM SCHEMA.TABLE A WHERE A.FIELD NOT LIKE 'WORD%'
Run Code Online (Sandbox Code Playgroud)

但是,据我所知,A.FIELD在"WORD"之前有时会包含不同数量的空格.

显然,我可以使用另一个通配符重新编写查询,但这会使它变得不可思议并使其慢下来(此查询在相当大的表上运行并且需要尽可能高效).

有什么方法可以编写一个sargable查询来解决这个问题吗?

Dav*_*idG 6

如果由于任何原因无法清理数据,一个选项是向表中添加一个计算列,用于修剪所有前导和尾随空格:

ALTER TABLE YourTable
    ADD TrimmedYourColumn as (RTRIM(LTRIM(YourColumn)))
Run Code Online (Sandbox Code Playgroud)

并索引计算列:

CREATE INDEX IX_YourTable_TrimmedYourColumn 
    ON YourTable (TrimmedYourColumn)
Run Code Online (Sandbox Code Playgroud)

现在搜索该列代替:

SELECT A.ID FROM YourTable A WHERE TrimmedYourColumn NOT LIKE 'WORD%'
Run Code Online (Sandbox Code Playgroud)


sea*_*ean -4

利特里姆怎么样?

SELECT A.ID FROM SCHEMA.TABLE A WHERE ltrim(A.FIELD) NOT LIKE 'WORD%'
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这与“有什么方法可以编写可控制查询来解决这个问题吗?”的要求不匹配 (6认同)