2009-10-26 74 views
26

我的表中有一個varchar字段,我想對它進行排序。但我需要處理這個字段爲整數。意思是如果排序爲文本,順序是「19,2,20」,但我想要得到正確的順序「2,19,20」。mysql order varchar field as integer

任何人都可以幫助我嗎?

回答

17
SELECT * 
FROM mytable 
ORDER BY 
     CAST(mycol AS DECIMAL) 
+0

感謝Quassnoi – ntan 2009-10-26 14:35:34

+0

@Quassnoi:只是想知道,但比ORDER BY mycol是鑄造更高效+ 0 – dnagirl 2009-10-26 14:40:09

+0

不錯的主意我試駕它 – ntan 2009-10-26 14:42:26

40

我以某種方式沒有設法運行查詢CAST。我總是得到Error Code: 1064 near "DECIMAL"(或我選擇的其他數字類型)。於是,我找到了另一種方式來排序varchar的數字:

SELECT * 
FROM mytable 
ORDER BY ABS(mycol) 

簡單一點,在我的情況下工作。

2

可使用此代碼根據訂購varchar字段你需要

SELECT * FROM mytable ORDER BY ABS(mycol) 
14

下面是解

SELECT * FROM MyTable ORDER BY ABS(MyCol); 
5

您可以ABS()用於這一目的。 ABS()是一個數學函數,返回absolute (positive) value of the specified expression。所以查詢將是這樣的

SELECT * FROM MyTable ORDER BY ABS(MyCol); 
6

所有其他的答案使用ABS,其值轉換成絕對(正)值,假設整數是積極的。一個更好的解決辦法是使用* 1

SELECT * FROM mytable ORDER BY mycol * 1

這防止鑄造負數爲積極因素。啓發:mysql sort string number