我的输入数据中有一列,其中包含以逗号分隔的多个值。示例:
[my_list] ' 1,123,233,400,500'
我想选择[my_list]包含的行' 123'。
我试过的是:
新的SQL.ARRAY(my_list.Split(','))==' 123'
' 123'在my_list.Split(','))
但没有成功。我真的不确定如何解决它。有人可以帮忙吗?
答案 0 :(得分:1)
尝试此查询:
SELECT *
FROM yourTable
WHERE
String.Concat(",", String.Concat([my_list], ",")) LIKE "%,123,%";
此技巧将,1,123,233,400,500,
与%,123,%
进行比较,即检查任何位置(开始,中间或结束)中的123
。
虽然此选项可以解决您的直接问题,但更好的长期解决方案是不在您的SQL表中存储CSV数据。
答案 1 :(得分:1)
@table =
SELECT * FROM
( VALUES
(1, "1,123,233,400,500"),
(2, "123,233,400,500"),
(3, "1,123"),
(4, "1,233,400,500"),
(5, "1, 123 ,233,400,500")
) AS T(id, my_list);
@result1 =
SELECT * FROM @table
WHERE my_list LIKE "%123%";
@result2 =
SELECT * FROM @table
WHERE new SQL.ARRAY<string>(my_list.Replace(" ", "").Split(',')).Contains("123");
答案 2 :(得分:1)
只是为了它的乐趣,这是使用CROSS APPLY EXPLODE解决相同请求的另一种方法:
@table =
SELECT * FROM
( VALUES
(1, "1,123,233,400,500"),
(2, "123,233,400,500"),
(3, "1,123"),
(4, "1,233,400,500"),
(5, "1, 123 ,233,123,500")
) AS T(id, my_list);
@result =
SELECT DISTINCT id, my_list
FROM @table CROSS APPLY EXPLODE (my_list.Split(new char[] {',', ' '})) AS x(item)
WHERE item == "123";
OUTPUT @result TO "/output/result.csv" USING Outputters.Csv(outputHeader:true);