如何从SQL Server数据库中获取以给定字符串开头的条目?

Erl*_* D. 14 c# sql t-sql sql-server string-comparison

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

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

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

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

Fos*_*sco 34

使用like时,您提供%符号作为通配符.如果你想要以Hello开头的字符串,你可以使用LIKE'Hello%'如果你想在字符串中的任何地方使用Hello,你可以使用LIKE'%Hello%'

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


OMG*_*ies 9

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

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

WHERE column LIKE 'abc%'
Run Code Online (Sandbox Code Playgroud)

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

WHERE column LIKE '%abc%'
Run Code Online (Sandbox Code Playgroud)

...将返回column值中包含"abc"的行.通配LIKE的左侧可以保证不能使用索引.

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

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


Héc*_*dez 5

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

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

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

'String in wich you search' LIKE 'abc%'
Run Code Online (Sandbox Code Playgroud)

使用性能最好的那个。