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

SQL中将带末尾五个零的浮点型手机号转字符串去零的问题咨询

浮点型手机号去除末尾固定5个零的SQL实现方案

你当前使用的RTRIM(STR(c.[From__Number_], 10, 5))存在长度限制问题:STR函数的第二个参数指定了输出总长度为10,超过10位的手机号会被截断,无法适配不同长度的号码需求。

方案1:类型转换法(最简单,推荐)

因为你所有手机号的小数部分固定为.00000,本质都是整数,直接两次类型转换即可,不需要额外处理字符串裁剪:

SELECT 
    CAST(CAST(c.[From__Number_] AS BIGINT) AS VARCHAR(20)) AS [To_Number_str]
FROM [database]

使用你提供的示例数据验证效果:

SELECT 
    CAST(CAST(To__Number_ AS BIGINT) AS VARCHAR(20)) AS To_Number_str,
    needed
FROM (
    SELECT 0111.00000 AS To__Number_  ,'0111' AS needed UNION 
    SELECT 021123456.00000 AS To__Number_ , '021123456' AS needed UNION 
    SELECT 64212121212.00000 AS To__Number_ ,'64212121212' AS needed
) t

运行后输出的To_Number_str和预期的needed完全匹配。

方案2:字符串裁剪法

如果需要兼容少数非全零小数的特殊场景,可以通过查找小数点位置完成裁剪:

SELECT 
    LEFT(num_str, CHARINDEX('.', num_str) - 1) AS [To_Number_str]
FROM (
    SELECT CAST(c.[From__Number_] AS VARCHAR(20)) AS num_str
    FROM [database]
) t

注意事项

如果手机号长度超过16位,浮点型本身存在精度丢失的风险,建议上游存储时直接使用字符串类型存储手机号,避免后续转换出现误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:36:03