MonetDB如何将逗号分隔列拆分为单独行
在MonetDB中拆分逗号分隔列到多行
要解决这个问题,你需要先把CLOB类型的列转成字符串,再拆分成数组,最后用unnest展开数组,具体操作如下:
- 转换CLOB为字符串:MonetDB的字符串拆分函数不直接支持CLOB类型,先用
CAST(items AS VARCHAR)将目标列转换为VARCHAR类型。 - 拆分字符串为数组:使用
split函数把逗号分隔的字符串拆成数组——你的数据里分隔符是,(逗号加空格),所以参数填,;如果要兼容逗号前后有无空格的情况,改用正则拆分regexp_split_to_array(CAST(items AS VARCHAR), '\s*,\s*')。 - 用unnest展开数组:把拆分后的数组传入
unnest,就能得到每行一个值的结果。
最终可用的SQL语句:
SELECT unnest(split(CAST(items AS VARCHAR), ', ')) AS Items FROM your_table;
如果需要兼容不规则的空格,改用正则拆分:
SELECT unnest(regexp_split_to_array(CAST(items AS VARCHAR), '\s*,\s*')) AS Items FROM your_table;
为什么之前的语句报错?
你直接对CLOB列调用unnest会报错,是因为MonetDB的unnest仅支持数组类型的输入,而CLOB是大对象类型,必须先转成字符串再拆分成数组,才能被unnest处理。
内容的提问来源于stack exchange,提问作者Arketes
相关产品推荐
相关产品推荐

