如何从 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
.
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+'%'
输出:
下面是我的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
如果您使用的是 SQL Server 2016 及以上版本,那么您可以使用 STRING_SPLIT
.
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+'%'
输出: