Leo*_*eon 3 sql t-sql sql-server full-text-search sql-server-2008
我正在使用MS SQL 2008,我现在面临着挑战.我的SP参数可以包含一个字符串中的一到三个单词(nvarchar),我必须为LIKE %phrase%
字符串中的每个单词返回匹配的记录.
例.我的参数是:
"stack overflow"
Run Code Online (Sandbox Code Playgroud)
必须返回的记录:
miSTACKon
noOVERFLOWon
STACKit
poOWERFLOW
STACK
OWERFLOW
Run Code Online (Sandbox Code Playgroud)
我也考虑过FTS,但CONTAINS函数在(每个)短语的末尾只有一个通配符
phrase*
Run Code Online (Sandbox Code Playgroud)
除动态SQL之外,是否有解决此问题的方法?
从通用示例开始,然后我会用一些"联合所有"来模拟它
select distinct Record from dbo.Records
inner join dbo.Split('stack overflow', ' ') tokens
on records_table.Record like '%' + tokens.value + '%'
Run Code Online (Sandbox Code Playgroud)
所以我在下面做的是我嘲笑了一些数据,这些数据是"记录,以及来自dbo.Split函数的模拟返回,基本上是一个varchars表,'stack'和'overflow'标记为''.
select distinct Name from (
select 'stack' as Name
union all
select 'nope' as Name
union all
select ' stackoverflow' as Name
) records_table
inner join (
select 'stack' as value
union all
select 'overflow' as value) tokens
on records_table.Name like '%' + tokens.value + '%'
Run Code Online (Sandbox Code Playgroud)
结果:
stack
stackoverflow
Run Code Online (Sandbox Code Playgroud)
dbo.Split功能没什么特别的,有很多实现例子......
归档时间: |
|
查看次数: |
2680 次 |
最近记录: |