MySQL中使用CAST/CONVERT将数值转为INT类型报错如何解决
问题根因
MySQL的类型转换函数本身就不支持直接传INT作为目标类型,你写的几个语句全不符合语法要求,必然执行失败:
select cast (int, 12.345);:CAST函数语法顺序完全写反,固定语法是CAST(待转换值 AS 目标类型),没有先写类型再写值的用法select cast 12.345 as int;:第一CAST的参数必须放在括号里,第二INT不是CAST支持的类型关键字select convert (12.345, int);:INT同样不是CONVERT支持的直接类型关键字
正确写法
MySQL里转整数有几种成熟写法,按需选择即可:
标准类型转换写法
不管用CAST还是CONVERT,整数对应的目标类型关键字是SIGNED(有符号整数)或者UNSIGNED(无符号整数),不是INT:
-- CAST写法,执行结果为12 SELECT CAST(12.345 AS SIGNED); -- 如果要无符号整数就把SIGNED换成UNSIGNED SELECT CAST(12.345 AS UNSIGNED); -- CONVERT写法,执行结果为12 SELECT CONVERT(12.345, SIGNED); SELECT CONVERT(12.345, UNSIGNED);
取整函数写法(非强制类型转换场景用)
如果只是要拿到整数结果,不需要严格走类型转换逻辑,直接用取整函数更方便:
-- 向下取整,小数部分直接舍弃,正数场景和转整数结果一致 SELECT FLOOR(12.345); -- 四舍五入取整 SELECT ROUND(12.345); -- 指定位数截断,第二个参数传0就是截断所有小数位 SELECT TRUNCATE(12.345, 0);
补充说明:如果待转换的是字符串格式的数字,上述类型转换写法也能正常识别;如果字符串完全不含合法数字前缀,转换结果会返回0。
内容的提问来源于stack exchange,提问作者Eyal David
相关产品推荐
相关产品推荐

