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
相关产品推荐
相关产品推荐

