在MySQL数据库中,价格的存储方式如下:
其中点代表千(意大利货币,就像美国的逗号)。 如果我尝试使用“按价格排序ASC”对这些数据进行排序,我有以下顺序:
似乎它将点与逗号混淆。 事实上,120是最后一个,但它应该是第一个。有没有办法正确订购序列?
答案 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