我需要在t-sql或linq中编写一个查询,该查询匹配包含大部分用户输入词的db记录。
〔实施例: db中的nvarchar字段:“快速的棕色狐狸跳过懒狗”
用户输入:“棕色牛”
该程序将匹配该记录,因为它具有单词brown。
如果我需要提供更多示例,请告诉我。
答案 0 :(得分:2)
假设您在MS SQL Server环境中使用T-SQL,那么您应该使用Full Text Search技术。它可以为您提供速度,让您远离重新发明轮子。
答案 1 :(得分:1)
我们通常使用UDF将字符串拆分为表格数据,并且可以使用相同的命令。
declare @searchStr nvarchar(100)
set @searchStr = 'brown fox'
selecT T.* from test T, dbo.fnc_SplitSTring(@searchStr,' ')
where T.name like '%' + token + '%'
CREATE FUNCTION [dbo].[fnc_SplitString]
(
@InString varchar(8000),
@Delim char(1)
)
RETURNS @Return table
(
Position int identity,
Token varchar(100) -- Maximum token size is 100 chars...
)
As
BEGIN
Declare @CR varchar(1),
@LF varchar(1)
Set @CR = char(10)
Set @LF = char(13)
--
If @InString is null return
--
Declare @Pos int
Declare @Pattern char(3)
Set @Pattern = '%' + @Delim + '%'
--
Declare @Token varchar(30)
SELECT @InString = @InString + @Delim -- add trailing delimiter
SELECT @Pos = PATINDEX(@Pattern, @InString)
WHILE (@Pos <> 0) BEGIN
SELECT @Token = ltrim(rtrim(SUBSTRING(@InString, 1, @Pos - 1)))
Select @Token = replace(@Token, @CR, '')
Select @Token = replace(@Token, @LF, '')
Insert @Return Values (@Token)
SELECT @InString = STUFF(@InString, 1, PATINDEX(@Pattern, @InString),'')
SELECT @Pos = PATINDEX(@Pattern, @InString)
END
--
return
--
END