我继承了一个将税率存储为字符串的数据库。它们有以下几种形式:
0
或7
。6.5
。null
(应解释为零)6.5%
。6,5%
或6,5
我需要一种简洁的方法来生成十进制mid-sql语句:
SELECT tax_rate FROM table
使用MySQL函数的一些结合,我想将所有格式的tax_rate转换为小数。
6.5%
变为.065
null
变为0
6,5
变为.065
有什么建议吗?
要明确,我可以通过并清理数据,但我无法控制生成这些条目的软件,以及将来使用创建的条目上面讨论的格式。这将需要重复消毒数据。我宁愿通过聪明的(或者我认为错综复杂的)SQL语句来处理它。
答案 0 :(得分:1)
这是一种非常简单的方法。 。 。有点:
select coalesce((replace(taxrate, ',', '.') + 0) / 100, 0)
这涵盖了您问题中的示例。
这是使用字符串的隐式转换。将所有前导数字(和小数位)转换为数字。 + 0
并非绝对必要,但这是我用于隐式转换的惯例。