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

SQL实现:将两INT列间所有数字拼接至第三列的方法求助

SQL生成两整数列间连续数字并拼接的解决方案

下面针对不同主流数据库给出具体实现方案:

MySQL/MariaDB 版本

如果你的数据库版本支持递归CTE(MySQL 8.0+),可以用下面的语句:

WITH RECURSIVE num_range AS (
    SELECT ColumnA AS num, ColumnA, ColumnB
    FROM your_table
    UNION ALL
    SELECT num + 1, ColumnA, ColumnB
    FROM num_range
    WHERE num < ColumnB
)
SELECT 
    ColumnA,
    ColumnB,
    GROUP_CONCAT(num SEPARATOR ';') AS ColumnC
FROM num_range
GROUP BY ColumnA, ColumnB;

要是用的是低于8.0的MySQL,得提前建一个数字辅助表(比如存1到1000的数字),再关联查询生成范围。

SQL Server 版本

SQL Server 2017及以上可以用STRING_AGG,配合递归CTE:

WITH num_range AS (
    SELECT ColumnA AS num, ColumnA, ColumnB
    FROM your_table
    UNION ALL
    SELECT num + 1, ColumnA, ColumnB
    FROM num_range
    WHERE num < ColumnB
)
SELECT 
    ColumnA,
    ColumnB,
    STRING_AGG(num, ';') AS ColumnC
FROM num_range
GROUP BY ColumnA, ColumnB
OPTION (MAXRECURSION 0);

如果是2017之前的版本,用FOR XML PATH的方式拼接:

SELECT 
    t.ColumnA,
    t.ColumnB,
    STUFF((
        SELECT ';' + CAST((t.ColumnA + n - 1) AS VARCHAR)
        FROM (
            SELECT TOP (t.ColumnB - t.ColumnA + 1) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS n
            FROM sys.all_columns
        ) AS nums
        FOR XML PATH('')
    ), 1, 1, '') AS ColumnC
FROM your_table t;

PostgreSQL 版本

递归CTE加上STRING_AGG,注意要把数字转成文本:

WITH RECURSIVE num_range AS (
    SELECT ColumnA AS num, ColumnA, ColumnB
    FROM your_table
    UNION ALL
    SELECT num + 1, ColumnA, ColumnB
    FROM num_range
    WHERE num < ColumnB
)
SELECT 
    ColumnA,
    ColumnB,
    STRING_AGG(num::TEXT, ';') AS ColumnC
FROM num_range
GROUP BY ColumnA, ColumnB;

Oracle 版本

用CONNECT BY生成序列,再用LISTAGG拼接:

SELECT 
    ColumnA,
    ColumnB,
    LISTAGG(num, ';') WITHIN GROUP (ORDER BY num) AS ColumnC
FROM (
    SELECT 
        t.ColumnA,
        t.ColumnB,
        t.ColumnA + LEVEL - 1 AS num
    FROM your_table t
    CONNECT BY LEVEL <= t.ColumnB - t.ColumnA + 1
        AND PRIOR t.ColumnA = t.ColumnA
        AND PRIOR t.ColumnB = t.ColumnB
        AND PRIOR SYS_GUID() IS NOT NULL
)
GROUP BY ColumnA, ColumnB;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:27:23