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

从MySQL表中查询财务数据时经常需要计算金钱字段,对于不同的数据会遇到不同的处理要求,这边遇到的情况包括:

  1. 遇到NULL值返回0
  2. 计算结果永远保留两位小数(包括.00)
  3. 如果可以整除的话计算结果省略小数位(不包括.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
;

 

你可能感兴趣的:(#,MySQL,/,MariaDB,MySQL,NULL值返回0,计算结果保留两位小数,计算结果保留小数部分00,计算结果不保留小数部分00)