检查数字是否在数组中,这是SQL数据库字段的内容

时间:2019-04-09 19:16:21

标签: tsql

SQL数据库字段具有一个数组作为内容(逗号分隔的值,所有整数)。我需要检查此数组中是否有数字,如果是,则在选择查询中对记录进行过滤。

一个简单的解决方案是:假设下面的函数类似“ Is_In”:

select * from table where @number Is_In([fieldWithArrayContent])

我希望函数中甚至存在可以编写并用于解决此问题的函数中的SQL。

2 个答案:

答案 0 :(得分:0)

您需要使用分离器功能-为获得最佳性能,我建议使用DelimitedSplit8k。然后,您可以这样做:

-- Sample Data 
DECLARE @sometable TABLE (someid INT IDENTITY, someArray VARCHAR(1000));
INSERT @sometable(someArray)
VALUES('1,2,10,12'),('5,6,7'),('10,12,10,20,10,10'),('1,2,3'); -- id 1 & 3 have the value "10"

-- Variable
DECLARE @number INT = 10;

SELECT DISTINCT t.someid, t.someArray
FROM   @sometable AS t
CROSS APPLY dbo.delimitedSplit8k(t.someArray,',') AS s
WHERE @number = s.item;

返回:

someid      someArray
----------- ------------------------
1           1,2,10,12
3           10,12,10,20,10,10

答案 1 :(得分:0)

使用与Alan相同的示例,我们可以在没有拆分功能的情况下使用如下字符串操作来做到这一点:-

DECLARE @sometable TABLE (someid INT IDENTITY, someArray VARCHAR(1000));
INSERT @sometable(someArray)
VALUES('1,2,10,12'),('5,6,7'),('10,12,10,20,10,10'),('1,2,3'); -- id 1 & 3 have the value "10"

-- Variable
DECLARE @number INT = 1 --or 10 will work
Declare @seperator varchar(1)=','
Declare @search varchar(50)=CONCAT('%',@seperator,cast(@number as varchar(10)),@seperator,'%')

SELECT  t.someid, t.someArray
FROM   @sometable AS t
WHERE CONCAT(@seperator,someArray,@seperator) like @search