当数据库中设计金额时,我们应该将金额字段设置为decimal或者numric,这两者几乎没有什么区别,如果感兴趣可以参考这里。
不幸的是,小菜鸟的我思考都没思考直接将金额设置成了varchar类型,一开始觉得这么设置挺好的,精度不会缺失。但在在使用过程中就遇到了麻烦!假设你只是显示数据,不用计算金额那一点问题都没有!当你需要进行金额运算时,就会出错,其实就是字符串的拼接!或者你在按金额排序时,也会默认按照字符串的比较进行排序。
作为懒人的我,虽然意识到自己的错误,但是却不想修改代码,寻思能不能找一种补救的方法。可以使用convert函数(当然也可以使用cast函数,效果差不多),
栗如:
select * from product order by convert(p_money, decimal)
支持转化为的类型:
type类型 | 说明 |
---|---|
BINARY | 二进制 |
CHAR() | 字符型,可带参数 |
DATE | 日期 |
TIME | 时间 |
DATETIME | 日期时间型 |
SIGNED | 整数 |
UNSIGNED | 无符号整数 |
除此之外,还有一种方法,但不推荐使用,直接在varchar字段上+0
栗如:
select * from product order by p_money+0
不推荐的理由:对于+0后的金额数据类型表示怀疑!!!