如何从SQL列中添加的字符串数组中进行选择?

问题描述 投票:0回答:1

下面是我的桌子,

    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"]')

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

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


我想通过将colPar作为'param1,param2'传递行来选择行,因此它将导致我在colParam中包含param1和param2的所有记录

sql arrays select where-clause sql-like
1个回答
0
投票

如果使用的是SQL Server 2016及更高版本,则可以使用STRING_SPLIT

As MSDN says:

一个表值函数,将字符串分成子字符串行,基于指定的分隔符。

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

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
© www.soinside.com 2019 - 2024. All rights reserved.