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并不是最佳的.您应该查看全文搜索.
我知道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)是搜索文本的最佳方式.
您还可以使用以下语句实现 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)
使用性能最好的那个。