sql - 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。我需要将此函数应用于另一个表的列,因此它必须是一个函数。
解决方案
我找到了解决方案。使用 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
推荐阅读
- c# - 更改字体大小和样式
- vue.js - mixin 中的 Nuxt 上下文
- sql - 从表格中选择最近的日期
- java - JComponents 无法正确显示
- node.js - 无法在 firebase CLI 中安装 @firebase/testing
- php - 在 Laravel 中通过表格获得一行的最佳方法是什么?
- python - 如何将单独的 URL 前缀集映射到 Flask 蓝图
- python - selenium.common.exceptions.TimeoutException:消息:30000 毫秒后超时加载页面
- apache-kafka - Kafka Connect - 仅当存在时才转换重命名字段
- python - ModuleNotFoundError:没有名为“Cog”的模块