使用小数数字和无十进制数字排序varchar字段

时间:2015-11-09 03:09:57

标签: php mysql

包含小数和无小数的Varchar字段。

例如:

100.02
99
9
200.56
500.4
10.1
6

如何命令它以ASC顺序显示

我尝试下面没有运气的代码

SELECT * FROM posts ORDER BY CAST(price AS DECIMAL(10,2)) DESC LIMIT 0, 9

另外

SELECT * FROM posts ORDER BY convert(price, decimal) DESC LIMIT 0, 9

但上述代码似乎都不起作用。有人能指出我这样做的正确方法。

1 个答案:

答案 0 :(得分:3)

排序问题是由于对数字使用了sting类型字段,它永远不会像人们期望的那样排序。

如果字段类型是价格,则不应使用float,而应使用 DECIMAL或NUMERIC

  

DECIMAL和NUMERIC类型存储精确的数值数据值。在保持精确精度很重要时使用这些类型,例如使用货币数据。

你不想要"近似"价格的价值

  

FLOAT和DOUBLE类型表示近似数值数据值