记录一个关于数据库设计以及查询的反面教材

  当数据库中设计金额时,我们应该将金额字段设置为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后的金额数据类型表示怀疑!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容