You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Stream Analytics:无SPLIT函数时拆分单列方括号内容为多列

可以通过CROSS APPLY、SUBSTRING、CHARINDEX实现需求

完全可以用这几个函数组合实现不定数量值的拆分,核心思路是先提取方括号内的纯字符串,再通过定位分隔符(默认是JSON数组的逗号)的位置,逐个截取对应值作为列。以下是具体实现方案:

示例SQL代码

假设你的表名为YourTable,目标列名为ColumnA,代码如下:

SELECT
    原始值 = t.ColumnA,
    列1 = CASE WHEN pos1 > 0 THEN SUBSTRING(清理后字符串, 1, pos1 - 1) ELSE 清理后字符串 END,
    列2 = CASE WHEN pos2 > 0 THEN SUBSTRING(清理后字符串, pos1 + 1, pos2 - pos1 - 1) 
                  WHEN pos1 > 0 THEN SUBSTRING(清理后字符串, pos1 + 1, LEN(清理后字符串)) 
                  ELSE NULL END,
    列3 = CASE WHEN pos3 > 0 THEN SUBSTRING(清理后字符串, pos2 + 1, pos3 - pos2 - 1) 
                  WHEN pos2 > 0 THEN SUBSTRING(清理后字符串, pos2 + 1, LEN(清理后字符串)) 
                  ELSE NULL END,
    列4 = CASE WHEN pos3 > 0 THEN SUBSTRING(清理后字符串, pos3 + 1, LEN(清理后字符串)) ELSE NULL END
FROM YourTable t
-- 提取方括号内的纯字符串,去掉前后的[]
CROSS APPLY (
    SELECT 清理后字符串 = SUBSTRING(t.ColumnA, CHARINDEX('[', t.ColumnA) + 1, CHARINDEX(']', t.ColumnA) - CHARINDEX('[', t.ColumnA) - 1)
) ca_clean
-- 定位第一个逗号的位置
CROSS APPLY (
    SELECT pos1 = CHARINDEX(',', 清理后字符串)
) ca_pos1
-- 定位第二个逗号的位置(从第一个逗号后开始找)
CROSS APPLY (
    SELECT pos2 = CHARINDEX(',', 清理后字符串, pos1 + 1)
) ca_pos2
-- 定位第三个逗号的位置(从第二个逗号后开始找)
CROSS APPLY (
    SELECT pos3 = CHARINDEX(',', 清理后字符串, pos2 + 1)
) ca_pos3

代码说明

  1. 提取括号内内容:通过SUBSTRING结合CHARINDEX找到[和]的位置,截取中间的纯值字符串(比如将[a,b,c,d]转为a,b,c,d)。
  2. 定位分隔符:通过多次CROSS APPLY依次定位第N个逗号的位置,为后续截取做准备。
  3. 截取列值:用CASE语句判断分隔符是否存在,动态截取对应区间的字符串作为列值。如果某行只有2个值,后续未用到的列会自动填充NULL,适配值数量不固定的场景。

如果你的数据中值的数量可能超过4个,只需继续扩展CROSS APPLY定位更多逗号位置,并新增对应的列截取逻辑即可。

内容的提问来源于stack exchange,提问作者2023hpy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:13:13