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

Oracle中不使用REGEXP实现行转列(REGEXP耗时过长)

逗号分隔字符串转多行的高效替代方案

MySQL 场景

8.0及以上版本(推荐)

用JSON_TABLE把字符串转成JSON数组后展开,原生函数性能远胜正则:

SELECT value
FROM JSON_TABLE(
  CONCAT('["', REPLACE('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342", ', '", "'), '"]'),
  '$[*]' COLUMNS (value VARCHAR(20) PATH '$')
) AS jt;

低版本MySQL

如果值的数量固定,直接用UNION ALL配合SUBSTRING_INDEX拆分,比正则快:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',', 1), ',', -1) AS value
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',', 2), ',', -1)
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',', 3), ',', -1)
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',', 4), ',', -1)
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',', 5), ',', -1)
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',', 6), ',', -1)
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',', 7), ',', -1)
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',', 8), ',', -1)
UNION ALL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',', 9), ',', -1);

PostgreSQL 场景

用原生的STRING_TO_ARRAY+UNNEST组合,这是PostgreSQL处理字符串拆分的最优方式:

SELECT unnest(string_to_array('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',')) AS value;

SQL Server 场景

2016及以上版本直接用STRING_SPLIT,微软专门优化的拆分函数,性能碾压正则:

SELECT value
FROM STRING_SPLIT('111_122,111_142,111_222,111_322,142_342,212_232,222_242,312_332,322_342', ',');

通用优化建议

  • 优先用数据库原生拆分函数,这类函数都是底层实现,比正则表达式的字符匹配效率高几个量级
  • 如果需要频繁处理这类数据,建议在数据入库时就拆分成多行存储,彻底避免查询阶段的拆分开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:52:07