开发者社区> 问答> 正文

通过文本列是否包含SQL中的字符串中的任何单词来过滤行

我的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

非常感谢。

展开
收起
祖安文状元 2020-01-03 18:35:00 565 0
1 条回答
写回答
取消 提交回答
  • 如果您运行的是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;
    
    2020-01-03 18:35:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载