选择部分匹配的查询

时间:2019-01-29 08:34:52

标签: sql arrays sql-server select

我想从[Column]中选择所有在其字符串中具有如下单词的行:

select [Column]
from [db]
where [Column] like '%some%' or 
      [Column] like '%word%' or
      [Column] like '%and%' or
      [Column] like '%another%' 

但是,由于我的单词很长,所以我不想重复or [Column] like '%%'。有没有更好的方法来写这个?我正在使用SQL Server Management Studio。

3 个答案:

答案 0 :(得分:2)

使用临时表或变量表,并将WHERE移至JOIN

DECLARE @PartialMatches TABLE (PartialMatch VARCHAR(100))

INSERT INTO @PartialMatches (PartialMatch)
VALUES ('some'),('word'),('and'),('another')

select 
    D.[Column]
from 
    [db] AS D 
    INNER JOIN @PartialMatches AS P ON D.[Column] LIKE '%' + P.PartialMatch + '%'

您可以选择在表上或表外添加类似的特殊字符(%)。将它们放在桌子上可以提供更大的灵活性,例如,您可以放some%%word

答案 1 :(得分:0)

这个(匹配列表或不匹配列表)对我有用...

declare @matchs table ( match varchar(50));
declare @notmatchs table ( notmatch varchar(50));
insert into @matchs (match) values ('%matchfield1%');
insert into @notmatchs (notmatch) values ('%nomatch1'), ('nomatch2%');

select e.* 
from mytable e
where not exists (select top 1 1 from @notmatchs nm where e.ObjectName like nm.notmatch)
and exists (select top 1 1 from @matchs m where e.ObjectName like m.match)

答案 2 :(得分:-1)

您可以使用以下格式编写查询。

select [Column]
from [db]
where [Column] like '%[some-word-and-another]%'