MySQL,价格订购

时间:2012-02-27 21:49:09

标签: php mysql

在MySQL数据库中,价格的存储方式如下:

  • 20.000
  • 25.000
  • 25.000
  • 10.000
  • 120

其中点代表千(意大利货币,就像美国的逗号)。 如果我尝试使用“按价格排序ASC”对这些数据进行排序,我有以下顺序:

  • 10.000
  • 20.000
  • 25.000
  • 120

似乎它将点与逗号混淆。 事实上,120是最后一个,但它应该是第一个。有没有办法正确订购序列?

3 个答案:

答案 0 :(得分:3)

是。不要将它们存储为字符串。您应该使用DECIMAL(10, 2),其中10是它可以存储的总位数,2是小数点右侧有多少位数。您可以根据需要调整参数,但将它们存储为字符串不是一个好主意。

答案 1 :(得分:1)

他期待得到这个结果:

120
10.000
20.000
25.000
25.000

现在,

select price from t
order by CAST(price  AS DECIMAL(10,2));

select price from t
Order by price+0 ASC

两者都会回复:

10.000
20.000
25.000
25.000
120

他需要以某种方式解析这个领域:

select price from t
order by replace(price, '.', '')+0;

这给出了预期的结果。

你可以玩它here

另请注意,如果您有小数(由','分隔),则可能必须使用此查询:

select price from t
order by replace(replace(price, '.', ''), ',', '.')+0;

现在,我们的想法当然不是将它们存储为文本......

答案 2 :(得分:0)

似乎价格列是varchar。

你需要在{float或double

cast
ORDER BY CAST(price  AS DECIMAL(10,2));

或简单的你可以在order by by

上使用下面的排序技巧
Order by price+0 ASC