SQL中将float类型字段转换为varchar并去除小数部分的方法咨询
解决方案
报错原因
你直接将float类型的BrandID转为varchar时,会完整保留小数点及后续的小数位,比如1000962.000000转成字符串后总长度为13位,超出了目标长度限制,因此触发截断报错。
通用解决思路
先将float值取整转为整数类型,再转为varchar即可,避免带入小数部分,以下是不同数据库的实现方案:
SQL Server 实现
- 常规场景(BrandID值不超过INT取值范围)
SELECT CAST(CAST(BrandID AS INT) AS VARCHAR(11)) AS BrandID FROM 你的表名;
- 大ID场景(BrandID值超出INT范围)
SELECT CAST(CAST(BrandID AS BIGINT) AS VARCHAR(11)) AS BrandID FROM 你的表名;
也可以用FLOOR函数先取整再转换,效果一致:
SELECT CAST(FLOOR(BrandID) AS VARCHAR(11)) AS BrandID FROM 你的表名;
MySQL 实现
SELECT CAST(CAST(BrandID AS UNSIGNED) AS CHAR(11)) AS BrandID FROM 你的表名;
如果存在负数值的BrandID,将UNSIGNED替换为SIGNED即可。
Oracle 实现
SELECT TO_CHAR(TRUNC(BrandID)) AS BrandID FROM 你的表名;
注意:ID类字段本质是标识性质的文本,不涉及数值计算,建议后续调整表结构直接用INT/BIGINT或者VARCHAR类型存储,避免使用float类型带来的精度丢失、转换麻烦等问题。
内容的提问来源于stack exchange,提问作者Agustina Sadikin
相关产品推荐
相关产品推荐

