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

如何按预定义行长度将VARCHAR拆分为多行?

将VARCHAR字符串按指定行长度拆分为多行

假设我们有目标字符串:"The quick brown fox jumps over the lazy dog",指定行长度为15时,拆分后结果如下:

split
---------------
The quick brown
fox jumps over
the lazy dog

针对这个需求,不同数据库可以用这些方法实现:

MySQL 8.0+ 实现

用递归CTE(公共表表达式)循环截取字符串:

WITH RECURSIVE split_strings AS (
    SELECT 
        1 AS row_num,
        SUBSTRING(column_name, 1, 15) AS split_part,
        SUBSTRING(column_name, 16) AS remaining_str
    FROM your_table
    WHERE column_name IS NOT NULL AND column_name != ''
    UNION ALL
    SELECT 
        row_num + 1,
        SUBSTRING(remaining_str, 1, 15),
        SUBSTRING(remaining_str, 16)
    FROM split_strings
    WHERE remaining_str IS NOT NULL AND remaining_str != ''
)
SELECT split_part AS split
FROM split_strings;

把代码里的your_table和column_name换成实际表名和字段名,15替换成需要的行长度即可。递归逻辑是先截前15个字符,剩下的部分继续重复截取,直到没有剩余内容。

PostgreSQL 实现

利用generate_series生成行数,配合substring批量截取:

SELECT 
    SUBSTRING(column_name FROM (n * 15 - 14) FOR 15) AS split
FROM 
    your_table,
    generate_series(1, CEIL(LENGTH(column_name) / 15.0)::INT) AS n
WHERE column_name IS NOT NULL AND column_name != '';

generate_series会根据字符串总长度算出需要拆分的行数,然后逐行截取对应位置的15个字符。

SQL Server 实现

用递归CTE结合LEFT和STUFF处理:

WITH split_strings AS (
    SELECT 
        1 AS row_num,
        LEFT(column_name, 15) AS split_part,
        STUFF(column_name, 1, 15, '') AS remaining_str
    FROM your_table
    WHERE column_name IS NOT NULL AND column_name != ''
    UNION ALL
    SELECT 
        row_num + 1,
        LEFT(remaining_str, 15),
        STUFF(remaining_str, 1, 15, '')
    FROM split_strings
    WHERE remaining_str IS NOT NULL AND remaining_str != ''
)
SELECT split_part AS split
FROM split_strings;

LEFT取前15个字符,STUFF清空已截取的部分,递归处理剩余字符串。

注意事项

  • 所有示例里的15都可以替换成自定义的行长度变量
  • 最后一行如果不足指定长度,会自动保留剩余内容
  • 记得过滤空值,避免无效处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:20:16