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

SQL中实现数字反转与各位数字求和及表字段计算需求

解决SQL中数字反转与各位之和计算的问题

嘿,刚好碰到过类似的需求,我来给你详细拆解怎么实现!针对你那张包含decimal(18,0)类型列A的表,咱们可以通过字符串转换+内置函数轻松生成列B(数字反转)和列C(各位之和),下面直接上方案:

1. 实现数字反转(列B)

因为SQL里的反转函数REVERSE是针对字符串的,所以咱们先把decimal类型的列A转换成字符串,反转后再转回decimal就行,完美适配你的需求:

CAST(REVERSE(CAST(A AS VARCHAR(18))) AS DECIMAL(18,0)) AS B
  • 第一步CAST(A AS VARCHAR(18)):把decimal类型的数字转成字符串,方便用REVERSE处理
  • 第二步REVERSE(...):反转字符串内容
  • 第三步CAST(...) AS DECIMAL(18,0):把反转后的字符串转回原数据类型,保证列B和列A类型一致

2. 计算各位数字之和(列C)

这里分两种常见场景给你方案,优先用更简洁的版本:

方案一:用STRING_SPLIT(SQL Server 2016+ 或支持字符串拆分的数据库)

把列A转成字符串后拆分成单个字符,再转成数字求和:

(SELECT SUM(CAST(value AS INT)) FROM STRING_SPLIT(CAST(A AS VARCHAR(18)), '')) AS C
  • STRING_SPLIT(CAST(A AS VARCHAR(18)), ''):把数字字符串按空字符拆分,得到每一位的字符
  • SUM(CAST(value AS INT)):把每个字符转成整数后求和,就是各位数字的总和

方案二:递归CTE(兼容老版本SQL Server或不支持STRING_SPLIT的数据库)

如果你的数据库版本比较老,用递归的方式逐个提取每一位数字相加:

(
    WITH RecursiveSum AS (
        SELECT 
            A AS OriginalNum,
            A % 10 AS Digit,
            A / 10 AS RemainingNum,
            CAST(A % 10 AS INT) AS SumSoFar
        FROM YourTable
        WHERE A > 0
        UNION ALL
        SELECT 
            OriginalNum,
            RemainingNum % 10 AS Digit,
            RemainingNum / 10 AS RemainingNum,
            SumSoFar + (RemainingNum % 10) AS SumSoFar
        FROM RecursiveSum
        WHERE RemainingNum > 0
    )
    SELECT MAX(SumSoFar) FROM RecursiveSum WHERE OriginalNum = A
) AS C

这个递归会不断提取最后一位数字累加,直到剩余数字为0,最后取最大值就是总和。

完整SQL示例

假设你的表名叫YourTable,把上面的逻辑整合起来,完整语句如下:

SELECT 
    A,
    CAST(REVERSE(CAST(A AS VARCHAR(18))) AS DECIMAL(18,0)) AS B,
    (SELECT SUM(CAST(value AS INT)) FROM STRING_SPLIT(CAST(A AS VARCHAR(18)), '')) AS C
FROM YourTable;

测试你给出的样本数据(34、123、345、879),得到的结果完全符合你的预期:

ABC
34437
1233216
34554312
87997824

如果是MySQL、PostgreSQL等其他数据库,核心逻辑一样,只是函数细节略有调整(比如MySQL用CHAR代替VARCHAR,字符串拆分用其他方式),你可以根据自己的数据库类型微调。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:29:32