bal*_*alu 7 sql-server-2008 query pattern-matching

我有一个包含以下文本的表格,我要搜索的关键字是“搜索”。所以我写了一个查询
SELECT [ID]
,[TextValue]
FROM
[dbo].[SearchLike]
WHERE
[TextValue] LIKE '%Search%'
Run Code Online (Sandbox Code Playgroud)
Q.1如何修改查询,以便只返回文本中包含“搜索”的记录,而不是使用“LSearch”。即根据图像前三个记录只返回。?
单行如搜索:
WHERE
' ' + [TextValue] + ' ' LIKE '%[.,;:() ]Search[.,;:() ]%'
/* [] contains list of allowable characters, adding spaces around
[TextValue] removes need to have multiple OR [TextValue] LIKE */
Run Code Online (Sandbox Code Playgroud)如果没有填充,您将需要专门处理出现在字符串开头/结尾的字符串:
WHERE
[TextValue] LIKE '%Search%' --middle
OR
[TextValue] LIKE 'Search%' --start
OR
[TextValue] LIKE '%Search' --end
Run Code Online (Sandbox Code Playgroud)Edit2,对于全文纯粹主义者
CREATE FULLTEXT INDEX AUTO 选项的 MSDN 状态(默认)
尽管更改会自动传播,但这些更改可能不会立即反映在全文索引中。
因此,它可能不会给出正确的结果。但几秒钟后它就会。
此外,对于多达几个 10k 行,它将充分执行:它缩放 O(n)。我在一个大约有 25k 行的表上使用 LIKE,但用户知道如果他们以这种方式搜索(它在“高级”页面上),它的性能会很差。我通过管理全文索引获得了权衡
全文搜索是不是在正确的解决方案,它是一个选项
注意:经验告诉我,SQL Server 中的全文索引对性能有严重影响,即:仅在您确实需要并且知道自己在做什么时才实施!(@安德鲁·比克顿)
如果您的表将有大量行,您可能想尝试使用 FULLTEXT 索引。它会快得多,并且只会匹配确切的单词。
CREATE FULLTEXT CATALOG <catalog_name> AS DEFAULT;
CREATE FULLTEXT INDEX ON [dbo].[SearchLike](TextValue)
KEY INDEX pk_id; --requires the existing of a PK or UQ index with this name on this table
Run Code Online (Sandbox Code Playgroud)
现在搜索您的文本:
SELECT [ID]
,[TextValue]
FROM
[dbo].[SearchLike]
WHERE
CONTAINS([TextValue], 'Search')
Run Code Online (Sandbox Code Playgroud)
更多关于:
| 归档时间: |
|
| 查看次数: |
6008 次 |
| 最近记录: |