首页 > 解决方案 > Sql Server 匹配整个单词

问题描述

在一个 SQL 表中,我需要找到一个单词的出现(从另一个表中的列表中)。我创建了一个函数来查找匹配值。函数可用于查找子字符串,但我需要进行完整的单词匹配并注意接受另一个表中允许的分隔符。

例子 -

"Ben" should match  
"Ben's" should not match  
"Ben, John" should match
"Ben,John" should not match

表关键字列表 -

| Id  |  Keyword |
------------------
| 1   | Cov      |
| 2   | Cover    |
| 3   | Ben      |

表分隔符列表 -

| Id  |  Delimiters |
---------------------
| 1   |             | (single space)
| 2   | ,           |

功能定义 -

Create function dbo.searchString(@inputString NVARCHAR(MAX))
RETURNS NVARCHAR(1000)
BEGIN
        
DECLARE @strKeywords nvarchar(1000)
select @strKeywords = COALESCE(@strKeywords + ',','') + Keyword FROM (
   select charindex(keyword, @inputString) as indexVal, keyword
   from KeywordList
) keywords WHERE keywords.indexVal > 0

Return @strKeywords 
END

请注意,我使用的是 SQL Server 2012。我需要将此函数应用于另一个表的列,因此它必须是一个函数。

标签: sqlsql-server

解决方案


我找到了解决方案。使用 PATINDEX 我可以在文本中进行正则表达式搜索。用 PATINDEX 替换 CHARINDEX 可以按需要工作。下面是函数

Create function dbo.searchString(@inputString NVARCHAR(MAX))
RETURNS NVARCHAR(1000)
BEGIN
        
DECLARE @strKeywords nvarchar(1000)
DECLARE @delimiters nvarchar(100)
SET @delimiters = ' ,' -- This can be done by selecting the delimiters from table as well
select @strKeywords = COALESCE(@strKeywords + ',','') + Keyword FROM (
   select PATINDEX('%[' + @delimiters + ']' + keyword + '[' + @delimiters + ']%', @inputString) as indexVal, keyword
   from KeywordList
) keywords WHERE keywords.indexVal > 0

Return @strKeywords 
END

推荐阅读