使用SQL数据类型VARCHAR按价格排序

时间:2009-10-30 00:18:04

标签: php sql sorting types

我按价格排序,看:

  SELECT Price 
    FROM re2_listings 
ORDER BY Price asc

结果:

1.200.000,00
1.500.000,00
200,00
3.000,00

......但正确的方法是:

200,00
3.000,00
1.200.000,00
1.500.000,00

明白了吗?怎么做?

4 个答案:

答案 0 :(得分:3)

显然,VARCHAR不是存储数值的最佳数据类型。如果必须使用它,则需要在声明的SELECT和ORDER BY部分中将price列CAST为适当的数字类型,或者从视图中创建包含CAST和SELECT的视图。

CAST to的数据类型和CASTing的语法取决于产品。

答案 1 :(得分:0)

$q1 = "select Price from re2_listings order by CAST(Price AS Float)  asc";

答案 2 :(得分:0)

首先,了解您的SQL变体有助于回答您的问题。

如果您仍然能够控制架构,那么最好使用数字数据类型(例如int或float)作为列,并在显示时将其格式化为价格。

答案 3 :(得分:0)

MySQL或SQL Server支持:

  SELECT t.price
    FROM (SELECT r.price
                 CAST(r.price AS DECIMAL(15,2)) 'dprice'
            FROM RE2_LISTING r) t
ORDER BY t.dprice

我将varchar列转换为适当的数据类型,并使用了别名dprice,因此我可以引用它进行排序。如果您按升序排序,如果不想要,则无需指定ASC - 这是默认值。