如何从 SQL 列中添加的字符串数组 select?

How to select from string array added in SQL column?

下面是我的table,

create table t(
   id int,
   colParam varchar(max))

insert into t values(1,'["param1", "param2"]')
insert into t values(2,'["param2"]')
insert into t values(3,'["param1"]')
insert into t values(4,'["param2", "param3"]')
insert into t values(5,'["param1", "param2"]')

尝试过

declare @str varchar(max) = 'param1'; Select * from t where colParam like '%'+ @str+'%'

它不适用于

declare @str varchar(max) = 'param1,param2'; Select * from t where colParam like '%'+ @str+'%'

我想通过传递 colPar as 'param1,param2' 来 select 行,所以它会导致我在 colParam

中包含 param1 和 param2 的所有记录

如果您使用的是 SQL Server 2016 及以上版本,那么您可以使用 STRING_SPLIT.

As MSDN says:

A table-valued function that splits a string into rows of substrings, based on a specified separator character.

所以你可以看起来像这样:

DECLARE @t TABLE
(
    id int,
    colParam varchar(max)
)

insert into @t values(1,'["param1", "param2"]')
insert into @t values(2,'["param2"]')
insert into @t values(3,'["param1"]')
insert into @t values(4,'["param2", "param3"]')
insert into @t values(5,'["param1", "param2"]')

SELECT 
  t.id
, s.col
FROM @t AS t
OUTER APPLY
(
    SELECT 
    spl.value AS col
    FROM STRING_SPLIT(
        (SELECT _t.colParam FROM @t AS _t WHERE _t.id = t.id), ',') AS spl
 )s

这个安静刁钻。

create table #t(
    id int,
    colParam varchar(max)
)

insert into #t values(1,'["param1", "param2"]')
insert into #t values(2,'["param2"]')
insert into #t values(3,'["param1"]')
insert into #t values(4,'["param2", "param3"]')
insert into #t values(5,'["param1", "param2"]')

declare @str varchar(max) = 'param1,param2';     

到Return所有匹配值。

select distinct id, t1.colParam  from #t t1
cross apply string_split(t1.colParam, ',') t2
cross apply string_split(@str, ',') t3
where t2.value like '%'+t3.value+'%'

输出: