MySQL实用技巧:去除小数点后面多余的0,如果是1把“点”也去掉

360影视 2025-02-24 22:12 2

摘要:CAST(your_column AS CHAR):将数值转为字符串,消除固定小数位格式。TRIM(TRAILING '0' FROM ...):去除字符串末尾的 0。TRIM(TRAILING '.' FROM ...):处理可能残留的小数点(如 5. →

在 MySQL 中去除小数点后多余的 0,并根据需求同时去除小数点(当结果为整数时),可通过以下方法实现:

SELECT CASE WHEN TRIM(TRAILING '.' FROM trimmed_value) = '' THEN '0' ELSE TRIM(TRAILING '.' FROM trimmed_value) END AS resultFROM ( SELECT TRIM(TRAILING '0' FROM CAST(your_column AS CHAR)) AS trimmed_value) AS subquery;

效果说明

123.4500 → 123.455.0000 → 50.0000 → 0100.0 → 100

逻辑分析

CAST(your_column AS CHAR):将数值转为字符串,消除固定小数位格式。TRIM(TRAILING '0' FROM ...):去除字符串末尾的 0。TRIM(TRAILING '.' FROM ...):处理可能残留的小数点(如 5. → 5)。CASE 语句:避免纯 0 值(如 0.0000)处理后变为空字符串。SELECT CASE WHEN result LIKE '%.' THEN REPLACE(result, '.', '') ELSE result END AS final_resultFROM ( SELECT 0 + CAST(your_column AS CHAR) AS result) AS subquery;

效果说明

9.0000 → 97.5000 → 7.5

逻辑解析

0 + CAST(...):通过隐式转换将字符串数值转为浮点数,自动去除末尾的 0。CASE 语句:处理类似 9. 的中间结果,直接去除小数点。SELECT REGEXP_REPLACE( REGEXP_REPLACE(CAST(your_column AS CHAR), '0+$', ''), '\\.$', '' ) AS result;

效果说明

分两步正则匹配:先去除末尾的 0,再去除可能残留的小数点。-- 示例表结构CREATE TABLE test_data (value DECIMAL(18,4));INSERT INTO test_data VALUES (123.4500), (5.0000), (0.0000), (100.0);-- 执行查询SELECT original_value, CASE WHEN TRIM(TRAILING '.' FROM trimmed_value) = '' THEN '0' ELSE TRIM(TRAILING '.' FROM trimmed_value) END AS cleaned_valueFROM ( SELECT value AS original_value, TRIM(TRAILING '0' FROM CAST(value AS CHAR)) AS trimmed_value FROM test_data) AS subquery;

输出结果

+++| original_value | cleaned_value |+++| 123.4500 | 123.45 || 5.0000 | 5 || 0.0000 | 0 || 100.0 | 100 |+++

来源:电脑技术汇

相关推荐