从MySQL表中查询财务数据时经常需要计算金钱字段,对于不同的数据会遇到不同的处理要求,这边遇到的情况包括:
遇到NULL值返回0计算结果永远保留两位小数(包括.00)如果可以整除的话计算结果省略小数位(不包括.00)以下写法作为参考。
SELECT /* if record is NULL return 0 ; else return decimal of record / 100 with suffix precision remaining (eg: record 100 return 1.00 and record 1024 return 10.24) */ IF( IFNULL(t.`column`, 0) = 0, 0, CONCAT( LEFT( t.`column`, CHAR_LENGTH(t.`column`) -2 ), '.', RIGHT(t.`column`, 2) ) ) AS `new_column_0`, /* return value of record / 100: if decimal part is .00 without suffix precision remaining else with suffix precision remaining (eg: record 100 return 1 and record 1024 return 10.24) */ IF( t.`column` REGEXP '[[:digit:]]+00$', CAST(t.`column` / 100 AS UNSIGNED), CONCAT( LEFT( t.`column`, CHAR_LENGTH(t.`column`) -2 ), '.', RIGHT(t.`column`, 2) ) ) AS `new_column_1` FROM `table` AS t ;