2009-10-30 71 views
0

I'm通過價格排序,看看:通過價格與SQL數據類型排序VARCHAR

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 

瞭解嗎?這個怎麼做?

回答

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

很明顯,VARCHAR並不是存儲數字量的最佳數據類型。如果您必須使用它,則需要將價格列CAST到您的語句的SELECT和ORDER BY部分中適當的數字類型,或創建包含來自視圖的CAST和SELECT的視圖。

CAST to的數據類型以及CASTing的語法是依賴於產品的。

0

首先,它有助於瞭解你的SQL變體來回答你的問題。

如果您仍然有能力控制架構,那麼最好使用數字數據類型(例如int或float)作爲列,並將其格式化爲顯示時的價格。

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如果您不想 - 這是默認設置。

+0

也可以使用位置指示符ORDER BY 1按結果集中的第一列進行排序。 – 2009-10-30 01:04:40

+0

不推薦使用順序排序,因爲如果列順序發生變化 - 順序也是如此。 – 2009-10-30 01:16:41