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

SQL实现单行多字符串拆分入表及多字符串合并存入单行方法

SQL 字符串拆分与结构化拼接实现

按换行拆分字符串为逐行结果

核心逻辑是指定换行符作为分隔符,调用数据库内置的字符串拆分能力处理,注意提前替换Windows格式文本里的\r回车符,避免拆分出空行。
以下是主流数据库可直接运行的实现代码:

  • MySQL 8.0+ 版本(用递归CTE实现,兼容所有8.0以上环境)
-- 定义待拆分的原始字符串
SET @raw_str = 'tax
company name branch #1-0
123456789123456
2022-05-14 01:51:09
38.75
5.05
10-1 / B
Y29tcGFueSBuYW1lIGJyYW5jaCAjMS0wCjEyMzQ1Njc4OTEyMzQ1NgoyMDIyLTA1LTE0IDAxOjUxOjA5CjM4Ljc1CjUuMDUKMTAtMSAvIEI=';
-- 统一清理回车符
SET @raw_str = REPLACE(@raw_str, '\r', '');

WITH RECURSIVE split_cte AS (
    SELECT 
        1 AS line_no,
        SUBSTRING_INDEX(@raw_str, '\n', 1) AS line_content,
        SUBSTRING(@raw_str, LENGTH(SUBSTRING_INDEX(@raw_str, '\n', 1)) + 2) AS remain_str
    UNION ALL
    SELECT 
        line_no + 1,
        SUBSTRING_INDEX(remain_str, '\n', 1),
        SUBSTRING(remain_str, LENGTH(SUBSTRING_INDEX(remain_str, '\n', 1)) + 2)
    FROM split_cte
    WHERE remain_str != ''
)
SELECT line_content FROM split_cte;
  • PostgreSQL 版本
SELECT unnest(string_to_array(
    replace(
        'tax
company name branch #1-0
123456789123456
2022-05-14 01:51:09
38.75
5.05
10-1 / B
Y29tcGFueSBuYW1lIGJyYW5jaCAjMS0wCjEyMzQ1Njc4OTEyMzQ1NgoyMDIyLTA1LTE0IDAxOjUxOjA5CjM4Ljc1CjUuMDUKMTAtMSAvIEI=',
        E'\r', ''
    ),
    E'\n'
)) AS line_content;
  • SQL Server 2016+ 版本
DECLARE @raw_str NVARCHAR(MAX) = 'tax
company name branch #1-0
123456789123456
2022-05-14 01:51:09
38.75
5.05
10-1 / B
Y29tcGFueSBuYW1lIGJyYW5jaCAjMS0wCjEyMzQ1Njc4OTEyMzQ1NgoyMDIyLTA1LTE0IDAxOjUxOjA5CjM4Ljc1CjUuMDUKMTAtMSAvIEI=';

SET @raw_str = REPLACE(@raw_str, CHAR(13), '');
SELECT value AS line_content 
FROM STRING_SPLIT(@raw_str, CHAR(10))
WHERE RTRIM(value) != '';

如果拆分后需要映射到结构化字段,直接用拆分时生成的行号匹配即可,示例中8行内容顺序固定,按行号取值就能对应到各个业务字段。
拆分效果参考:
表数据拆分操作示例图

多值拼接为结构化JSON字符串存入单行

你需要存储的是标准JSON格式结构,禁止手动用字符串拼接函数拼JSON格式,一旦字段值里出现双引号、反斜杠、换行符等特殊字符,会直接导致JSON格式非法,后续无法解析。所有主流数据库都提供了内置的JSON构造函数,会自动处理特殊字符转义,直接调用即可。
以下是主流数据库插入JSON格式数据的示例:

  • MySQL 版本
INSERT INTO invoice_table (invoice_data)
VALUES (
    JSON_OBJECT(
        'SellerName', 'company name branch #1-0',
        'SellerTaxId', '123456789123456',
        'SellerTimeStamp', '2022-05-14 01:51:09',
        'TotalInvoiceIncludingTax', '38.75',
        'TotalTax', '5.05',
        'InvoiceNo', '10-1 / B',
        'QRCode', 'Y29tcGFueSBuYW1lIGJyYW5jaCAjMS0wCjEyMzQ1Njc4OTEyMzQ1NgoyMDIyLTA1LTE0IDAxOjUxOjA5CjM4Ljc1CjUuMDUKMTAtMSAvIEI='
    )
);
  • PostgreSQL 版本
INSERT INTO invoice_table (invoice_data)
VALUES (
    json_build_object(
        'SellerName', 'company name branch #1-0',
        'SellerTaxId', '123456789123456',
        'SellerTimeStamp', '2022-05-14 01:51:09',
        'TotalInvoiceIncludingTax', '38.75',
        'TotalTax', '5.05',
        'InvoiceNo', '10-1 / B',
        'QRCode', 'Y29tcGFueSBuYW1lIGJyYW5jaCAjMS0wCjEyMzQ1Njc4OTEyMzQ1NgoyMDIyLTA1LTE0IDAxOjUxOjA5CjM4Ljc1CjUuMDUKMTAtMSAvIEI='
    )
);
  • SQL Server 版本
INSERT INTO invoice_table (invoice_data)
VALUES (
    JSON_OBJECT(
        'SellerName' : 'company name branch #1-0',
        'SellerTaxId' : '123456789123456',
        'SellerTimeStamp' : '2022-05-14 01:51:09',
        'TotalInvoiceIncludingTax' : '38.75',
        'TotalTax' : '5.05',
        'InvoiceNo' : '10-1 / B',
        'QRCode' : 'Y29tcGFueSBuYW1lIGJyYW5jaCAjMS0wCjEyMzQ1Njc4OTEyMzQ1NgoyMDIyLTA1LTE0IDAxOjUxOjA5CjM4Ljc1CjUuMDUKMTAtMSAvIEI='
    )
);

存入效果参考:
存入表操作示例图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:03:24