拆分列和 select 值
Split column and select value
我的输入数据中有一列包含多个值,用逗号分隔。示例:
[my_list]
'1,123,233,400,500'
我想要 select [my_list] 包含“123”的行。
我试过的是:
新 SQL.ARRAY(my_list.Split(',')) == '123'
'123' 在 my_list.Split(','))
但是没有成功。我不太确定如何解决它。有人可以帮忙吗?
试试这个查询:
SELECT *
FROM yourTable
WHERE
String.Concat(",", String.Concat([my_list], ",")) LIKE "%,123,%";
这个技巧将 ,1,123,233,400,500,
与 %,123,%
进行比较,即它检查 任何 位置(开始、中间或结束)中的 123
.
虽然此选项可能会解决您眼前的问题,但更好的长期解决方案是不要将 CSV 数据存储在您的 SQL 表中。
@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");
为了好玩,这是使用 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);
我的输入数据中有一列包含多个值,用逗号分隔。示例:
[my_list] '1,123,233,400,500'
我想要 select [my_list] 包含“123”的行。
我试过的是:
新 SQL.ARRAY(my_list.Split(',')) == '123'
'123' 在 my_list.Split(','))
但是没有成功。我不太确定如何解决它。有人可以帮忙吗?
试试这个查询:
SELECT *
FROM yourTable
WHERE
String.Concat(",", String.Concat([my_list], ",")) LIKE "%,123,%";
这个技巧将 ,1,123,233,400,500,
与 %,123,%
进行比较,即它检查 任何 位置(开始、中间或结束)中的 123
.
虽然此选项可能会解决您眼前的问题,但更好的长期解决方案是不要将 CSV 数据存储在您的 SQL 表中。
@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");
为了好玩,这是使用 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);