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

如何在SQL中对varchar列的11位数字执行指定数值相加操作

解决方法:提取子串并数值相加

没问题,我来帮你实现这个需求!核心思路是先从原11位字符串中提取指定位置的子串,拼接零后转成数值,再和原数字相加。下面针对常见数据库给出具体的SQL语句:

通用逻辑说明

  1. 提取子串:从原varchar字段的第2位开始取5个字符(对应你示例中的10304)
  2. 生成待加数值:将提取的子串拼接5个零,转成数值类型(比如1030400000)
  3. 数值相加:把原字符串转成数值后,和上面生成的数值相加得到最终结果

MySQL 实现

SELECT
  num_col AS original_num,
  -- 计算要添加的数值
  CAST(CONCAT(SUBSTRING(num_col, 2, 5), '00000') AS BIGINT) AS add_value,
  -- 最终相加后的结果
  CAST(num_col AS BIGINT) + CAST(CONCAT(SUBSTRING(num_col, 2, 5), '00000') AS BIGINT) AS final_result
FROM your_table
-- 可选:确保原字段是11位纯数字,避免转换报错
WHERE REGEXP_LIKE(num_col, '^[0-9]{11}$');

SQL Server 实现

SELECT
  num_col AS original_num,
  CAST(CONCAT(SUBSTRING(num_col, 2, 5), '00000') AS BIGINT) AS add_value,
  CAST(num_col AS BIGINT) + CAST(CONCAT(SUBSTRING(num_col, 2, 5), '00000') AS BIGINT) AS final_result
FROM your_table
-- 可选:验证格式
WHERE PATINDEX('%[^0-9]%', num_col) = 0 AND LEN(num_col) = 11;

Oracle 实现

SELECT
  num_col AS original_num,
  TO_NUMBER(SUBSTR(num_col, 2, 5) || '00000') AS add_value,
  TO_NUMBER(num_col) + TO_NUMBER(SUBSTR(num_col, 2, 5) || '00000') AS final_result
FROM your_table
-- 可选:验证格式
WHERE REGEXP_LIKE(num_col, '^[0-9]{11}$');

注意事项

  • 确保原字段中的值都是11位纯数字,否则转换数值时会报错,上面的可选WHERE条件可以帮你过滤不符合格式的记录
  • 使用BIGINT类型是因为11位数字加上10位数字的总和不会超出BIGINT的存储范围,避免溢出问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:53:32