拆分列和 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);