2012-01-14 22 views
3

我在MySQL數據庫中有一個表,其中一列類型是longtext並且存儲了數字。我需要從列中按數字排序的表中獲取內容。在SQL中將longtext排序爲int

SELECT * FROM wp_postmeta WHERE meta_key = 'rating_avg' ORDER BY meta_value 

與此查詢排序是不妥當的,看起來像:

0 
1.6 
10 
5 

但我需要這樣的:

10 
5 
1.6 
0 

我可能不會改變列類型,因爲該列有很多不同類型的數據。有沒有可能在SQL查詢中更改臨時列類型?

回答

9

你在找什麼是CAST

CAST(expr AS type) 

您的SQL查詢應該是這樣的:

SELECT * FROM wp_postmeta WHERE meta_key = 'rating_avg' ORDER BY CAST(`meta_value` AS DECIMAL) DESC 
+0

我已經嘗試這樣做,它在數據庫中運行約前100行......前100行後,分揀繼續像排列文本。 – Milos 2012-01-27 12:54:12

+0

好吧,顯然你的數據庫/查詢有問題,而不是solutuion本身。 – technology 2012-01-27 13:10:50

1

這也可以通過本地WordPress的功能來實現,而無需求助於原始的SQL。通過參數meta_value_num而不是meta_valuereference)給WP_Query一個order。

1

它已經超過一年,因爲有人問,但對於引用任何人來到這裏,在搜索之後,得到的答案是

CAST(meta_value爲十進制(10,2))

所以查詢應該是:

SELECT * FROM wp_postmeta WHERE meta_key = 'rating_avg' ORDER BY CAST(`meta_value` AS DECIMAL(10,2)) DESC