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

SQL如何将字符串列拆分为多行且保留NULL值?

问题原因

你当前的写法用了隐式的CROSS JOIN LATERAL(SQL中逗号分隔多表等价于交叉连接),当val列为NULL时,SPLIT_TO_TABLE没有返回值,内连接逻辑会直接剔除对应的t1行,所以你拿不到NULL对应的结果。

解决方案

把连接逻辑改成LEFT JOIN LATERAL即可保留所有原始行,同时对NULL场景做兼容处理:

WITH t1 AS (
SELECT 'A' AS id, '{Other}' AS val UNION ALL
SELECT 'A' AS id, NULL AS val UNION ALL
SELECT 'A' AS id, '{Other Questions,Missing Document}' AS val UNION ALL
SELECT 'A' AS id, NULL AS val )
SELECT 
  t1.id,
  TRIM(REGEXP_REPLACE(IFNULL(s.value, ''), '[{}_]', ' ')) AS extracted
FROM t1
LEFT JOIN LATERAL SPLIT_TO_TABLE(t1.val, ',') s ON TRUE;

逻辑说明

  • LEFT JOIN LATERAL ... ON TRUE 会保留t1的所有行,哪怕SPLIT_TO_TABLE没有返回匹配结果
  • 用IFNULL(s.value, '')把NULL场景的空值替换为空字符串,避免后续正则处理返回NULL
  • 新增返回t1.id字段,匹配你预期的两列输出格式

执行后输出和你给出的预期效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:12:03