我的SQL Server数据库表有一列text,它是一长串文本。
搜索列表是一串用逗号分隔的单词。我想抓住那些文本列包含字符串中任何单词的行。
DECLARE @words_to_search nvarchar(50)
SET @words_to_search = 'apple, pear, orange'
SELECT *
FROM myTbl
WHERE text ??? --how to specify text contains @words_to_search
非常感谢。
如果您运行的是SQL Server 2016或更高版本,则可以使用STRING_SPLIT将单词转换为将搜索到单个列表中,然后使用以下命令将其转换为JOIN表中的内容LIKE:
DECLARE @words_to_search nvarchar(50)
SET @words_to_search = 'apple,pear,orange'
SELECT *
FROM myTbl
JOIN STRING_SPLIT(@words_to_search, ',') ON text LIKE '%' + value + '%';
关于SQLFiddle的演示
请注意,在编写查询时,它将(例如)apple在内匹配Snapple。您可以通过使JOIN条件更加复杂来解决此问题:
SELECT *
FROM myTbl t
JOIN STRING_SPLIT(@words_to_search, ',') v
ON t.text LIKE '%[^A-Za-z]' + value + '[^A-Za-z]%'
OR t.text LIKE value + '[^A-Za-z]%'
OR t.text LIKE '%[^A-Za-z]' + value;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。