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

如何在Snowflake中去除数值列末尾的多余零?

INT列去除末尾多余零的实现方案

INT类型数值本身存储不存在末尾多余零,你描述的场景大概率是原始值按固定倍率(如10000倍)放大转为INT存储(避免小数精度丢失),需要移除缩放带来的后缀零,以下是不同主流数据库的可落地实现方案:

1. 字符串处理方案(兼容性好)

  • MySQL 写法
-- 基础写法
SELECT CAST(TRIM(TRAILING '0' FROM CAST(目标列名 AS CHAR)) AS UNSIGNED) AS 处理后数值
FROM 你的表名;

-- 兼容值为0的场景,避免返回空
SELECT 
  IF(目标列名 = 0, 0, CAST(TRIM(TRAILING '0' FROM CAST(目标列名 AS CHAR)) AS UNSIGNED)) AS 处理后数值
FROM 你的表名;
  • PostgreSQL 写法
-- 基础写法
SELECT (regexp_replace(目标列名::TEXT, '0+$', ''))::INTEGER AS 处理后数值
FROM 你的表名;

-- 兼容0值写法
SELECT 
  CASE WHEN 目标列名 = 0 THEN 0 ELSE (regexp_replace(目标列名::TEXT, '0+$', ''))::INTEGER END AS 处理后数值
FROM 你的表名;
  • SQL Server 写法
SELECT CAST(REVERSE(LTRIM(REVERSE(CAST(目标列名 AS VARCHAR(20))))) AS INT) AS 处理后数值
FROM 你的表名;

2. 数学运算方案(性能更优)

不依赖字符串函数,适合大表批量计算场景:

SELECT 
  目标列名 / POWER(10, 
    CASE WHEN 目标列名 = 0 THEN 0
    ELSE LEN(CAST(目标列名 AS VARCHAR)) - LEN(CAST(CAST(REVERSE(CAST(目标列名 AS VARCHAR)) AS BIGINT) AS VARCHAR))
    END
  ) AS 处理后数值
FROM 你的表名

以上方案对输入为30000、100000、200000、200000的测试用例,输出结果均为3、10、20、20,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:08