21

我有一个数据库,其中包含很多要在标签系统中使用的单词。我已经为自动完成框创建了必要的代码,但我不确定如何以最有效的方式从数据库中获取匹配的条目。

我知道 LIKE 命令,但在我看来它更像是一个 EQUAL 命令。我只得到看起来与我输入的单词完全相同的单词。

我的计划是读取每一行,然后使用 C# 的 string.StartsWith() 和 string.Contains() 函数来查找可能适合的单词,但我认为对于大型数据库,读取每一行可能效率低下并且然后过滤它们。

有没有办法只从 SQL Server 读取以给定字符串开头或包含给定字符串的行?

4

4 回答 4

41

使用 like 时,您提供一个 % 符号作为通配符。如果你想要以 Hello 开头的字符串,你会使用 LIKE 'Hello%'

至于效率,使用 Like 并不是最优的。您应该查看全文搜索。

于 2010-07-27T17:02:23.020 回答
12

我知道 LIKE 命令,但在我看来它更像是一个 EQUAL 命令。我只得到看起来与我输入的单词完全相同的单词。

那是因为您没有使用通配符:

WHERE column LIKE 'abc%'

...将返回column值以“abc”开头的行。我要指出的是,当使用通配符时,这是唯一可以在column... er 列上使用索引的版本。

WHERE column LIKE '%abc%'

...将返回column值在其中任何位置包含“abc”的行。LIKE 左侧的通配符保证不能使用索引。

SQL Server 本身不支持正则表达式 - 您必须使用 CLR 函数才能访问该功能。但它的性能与 LIKE 相当。

全文搜索 (FTS) 是搜索文本的最佳方式。

于 2010-07-27T17:04:19.333 回答
6

您还可以使用以下语句实现 StartWith 功能:

LEFT('String in wich you search', X) = 'abc'

CHARINDEX('abc', 'String in wich you search') = 1

'String in wich you search' LIKE 'abc%'

使用性能最好的那个。

于 2016-09-07T06:57:22.590 回答
3

您可以CONTAINS在 T-SQL 中使用,但我很确定您必须对查询中涉及的表使用全文索引。

包含

全文搜索入门

于 2010-07-27T17:04:02.270 回答