2012-05-17 42 views
11

我無法找到將varchar列排序爲float的方法。這是我的SQL請求:使用CAST運算符將VARCHAR列排序爲FLOAT在MySQL中不起作用

SELECT guid, number FROM table ORDER BY 'CAST(number AS FLOAT) DESC' 

的 「號碼」 一欄是這樣定義的:

number varchar(20) ascii_general_ci 

而在此列定義爲我的測試值是:

0.00 
200.00 
20.00 
100.00 

的MySQL完全忽略CAST操作符並通過guid對列進行排序...

在MySQL中有錯誤還是我d有什麼問題?

+0

^^'ORDER BY'CAST(number AS FLOAT)DESC''的結果與'ORDER BY'foo''或'ORDER BY'ehrlkherklth ektl k''相同。您的聲明中的「ORDER BY」沒有意義...... – arnoudhgz

回答

32

試試這一招(有助於排序字符串作爲數字) -

SELECT guid, number FROM table ORDER BY number * 1 DESC 

這將有助於MySQL的投串號。


另一個解決方案 -

...CAST(value as DECIMAL(10,5)) 
+0

It works !!!仍然不明白爲什麼CAST操作員不工作,但你的技巧解決了我的問題。 –

+2

你不能投射到FLOAT。看看CAST函數參考,沒有FLOAT類型。 – Devart

+1

Woooh,你說得對,如果我這樣做:SELECT GUID,數字從表ORDER BY CAST(數字簽名)DESC沒有引號,它的工作!我嘗試過簽名但不是沒有引號。非常感謝 –

0

如果你已經採取GUID那麼大小應的是varchar(40) insted的,你可以使用uuid()

我把它用

select uuid(), number order by 'cast(number as float) desc'; 
完成

它工作正常。如果這不是你想要的,你可以發送你的整個代碼?

+0

你只是通過一個固定的字符串 –