Sql选择相似文本
我有一支乒乓球队Sql选择相似文本,sql,sql-server,Sql,Sql Server,我有一支乒乓球队 Id Name ... 1 Chelsea 2 Arsenal 3 Liverpool 现在我需要搜索我的球队表是否有“切尔西足球俱乐部”这样的名字。在这种情况下,当搜索字符串可能有额外的单词时,如何进行选择查询 我可以试试Lucene.net,但它只是一个很小的用法,有点过头了,学习它需要时间。您需要将字符串拆分并按字符串中的每个单词进行搜索。SQL Server没有本机函数来实现这一点,但web上有各种各样的示例 此函数将获取一个字符串和一个分隔符,
Id Name ...
1 Chelsea
2 Arsenal
3 Liverpool
现在我需要搜索我的球队表是否有“切尔西足球俱乐部”这样的名字。在这种情况下,当搜索字符串可能有额外的单词时,如何进行选择查询
我可以试试Lucene.net,但它只是一个很小的用法,有点过头了,学习它需要时间。您需要将字符串拆分并按字符串中的每个单词进行搜索。SQL Server没有本机函数来实现这一点,但web上有各种各样的示例 此函数将获取一个字符串和一个分隔符,并将字符串按分隔符拆分,然后返回一个结果值表
CREATE FUNCTION dbo.SplitVarchar (@stringToSplit varchar(4000), @delimiter CHAR(1))
RETURNS @Result TABLE(Value VARCHAR(50))AS
BEGIN
--This CTE will return a table of (INT, INT) that signify the startIndex and stopIndex
--of each string between delimiters.
WITH SplitCTE(startIndex, stopIndex) AS
(
SELECT 1, CHARINDEX(@delimiter, @stringToSplit) --The bounds of the first word
UNION ALL
SELECT stopIndex + 1, CHARINDEX(@delimiter, @stringToSplit, stopIndex+1)
FROM SplitCTE --Recursively call SplitCTE, getting each successive value
WHERE stopIndex > 0
)
INSERT INTO @Result
SELECT
SUBSTRING(@stringToSplit, --String with the delimited data
startIndex, --startIndex of a particular word in the string
CASE WHEN stopIndex > 0 THEN stopIndex-startIndex --Length of the word
ELSE 4000 END --Just in case the delimiter was missing from the string
) AS stringValue
FROM SplitCTE
RETURN
END;
一旦将分隔字符串转换为表,就可以将其与希望以这种方式搜索和比较值的表连接起来
DECLARE @TeamName VARCHAR(50)= 'Chelsea FC'
SELECT DISTINCT Name
FROM Team
INNER JOIN (SELECT Value FROM dbo.SplitVarchar(@TeamName, ' ')) t
ON CHARINDEX(t.Value, Name) > 0
结果:
| Name |
|---------|
| Chelsea |
我的设计基于Amit Jethva的使用全文搜索
了解有关全文搜索的更多信息
为了实施它
您可以像这样使用
:
declare @s varchar(20) = 'Chelsey FC'
select * from Team
where name like '%' + @s + '%' or
@s like '%' + name + '%'
如果
@s
包含名称
或名称
包含@s
这将过滤行。谢谢,我在回答之前已经为一个类似的问题编写了一份书面报告(因为它的措辞不好)。幸运的是,我保存了我的工作这是一个过分的解决方案。