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

在SQL中使用正则表达式将管道、逗号分隔字符串转换为表格

SQL 分隔字符串转结构化表格实现方案

实现核心逻辑

  • 第一步:按行分隔符|将输入字符串拆分为多行,每行对应表格的一条记录
  • 第二步:对每行逗号分隔的字符串,按列分隔符,拆分出3个字段,对应输出的c1、c2、c3列

MySQL 8.0+ 实现

WITH RECURSIVE input_str AS (
    -- 此处替换为实际输入字符串
    SELECT 'A,B,C|D,E,F|I,J,K' AS str
),
-- 生成行序号序列
row_nums AS (
    SELECT 1 AS n UNION ALL
    SELECT n + 1 FROM row_nums 
    WHERE n <= LENGTH((SELECT str FROM input_str)) - LENGTH(REPLACE((SELECT str FROM input_str), '|', '')) + 1
)
SELECT 
    REGEXP_SUBSTR(REGEXP_SUBSTR(t.str, '[^|]+', 1, rn.n), '[^,]+', 1, 1) AS c1,
    REGEXP_SUBSTR(REGEXP_SUBSTR(t.str, '[^|]+', 1, rn.n), '[^,]+', 1, 2) AS c2,
    REGEXP_SUBSTR(REGEXP_SUBSTR(t.str, '[^|]+', 1, rn.n), '[^,]+', 1, 3) AS c3
FROM input_str t
CROSS JOIN row_nums rn
WHERE REGEXP_SUBSTR(t.str, '[^|]+', 1, rn.n) IS NOT NULL;

PostgreSQL 实现

WITH input_str AS (
    -- 此处替换为实际输入字符串
    SELECT 'A,B,C|D,E,F|I,J,K' AS str
)
SELECT 
    (regexp_match(row_content, '([^,]+),([^,]+),([^,]+)'))[1] AS c1,
    (regexp_match(row_content, '([^,]+),([^,]+),([^,]+)'))[2] AS c2,
    (regexp_match(row_content, '([^,]+),([^,]+),([^,]+)'))[3] AS c3
FROM input_str,
-- 按|拆分多行
regexp_split_to_table(input_str.str, '\|') AS row_content;

Oracle 实现

WITH input_str AS (
    -- 此处替换为实际输入字符串
    SELECT 'A,B,C|D,E,F|I,J,K' str FROM DUAL
)
SELECT 
    REGEXP_SUBSTR(row_content, '[^,]+', 1, 1) c1,
    REGEXP_SUBSTR(row_content, '[^,]+', 1, 2) c2,
    REGEXP_SUBSTR(row_content, '[^,]+', 1, 3) c3
FROM input_str,
TABLE(CAST(MULTISET(
    -- 按|拆分多行
    SELECT REGEXP_SUBSTR(str, '[^|]+', 1, LEVEL) 
    FROM DUAL 
    CONNECT BY LEVEL <= REGEXP_COUNT(str, '\|') + 1
) AS SYS.ODCIVARCHAR2LIST)) t(row_content);

SQL Server 2017+ 实现

-- 此处替换为实际输入字符串
DECLARE @str NVARCHAR(MAX) = 'A,B,C|D,E,F|I,J,K';
WITH row_content AS (
    -- 按|拆分多行
    SELECT value AS row_str
    FROM STRING_SPLIT(@str, '|')
)
SELECT 
    REGEXP_SUBSTR(row_str, '[^,]+', 1, 1) AS c1,
    REGEXP_SUBSTR(row_str, '[^,]+', 1, 2) AS c2,
    REGEXP_SUBSTR(row_str, '[^,]+', 1, 3) AS c3
FROM row_content;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:06:07