从MySQL表中计算财务数据保留小数位以及保留或省略小数位00的SQL写法

    技术2022-07-11  74

    从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 ;

     

    Processed: 0.010, SQL: 9