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
瞭解嗎?這個怎麼做?
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
瞭解嗎?這個怎麼做?
$q1 = "select Price from re2_listings order by CAST(Price AS Float) asc";
很明顯,VARCHAR並不是存儲數字量的最佳數據類型。如果您必須使用它,則需要將價格列CAST到您的語句的SELECT和ORDER BY部分中適當的數字類型,或創建包含來自視圖的CAST和SELECT的視圖。
CAST to的數據類型以及CASTing的語法是依賴於產品的。
首先,它有助於瞭解你的SQL變體來回答你的問題。
如果您仍然有能力控制架構,那麼最好使用數字數據類型(例如int或float)作爲列,並將其格式化爲顯示時的價格。
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
如果您不想 - 這是默認設置。
也可以使用位置指示符ORDER BY 1按結果集中的第一列進行排序。 – 2009-10-30 01:04:40
不推薦使用順序排序,因爲如果列順序發生變化 - 順序也是如此。 – 2009-10-30 01:16:41