2012-01-26 40 views

回答

4

如果數字域總是在同一個地方,你可以寫

ORDER BY 0 + SUBSTRING(data, 5, 3) 

,或者如果他們總是被字符串中唯一的雙引號的約束,你可以寫

ORDER BY 0 + SUBSTRING_INDEX(SUBSTRING_INDEX(data, '"', -2), '"', 1) 

雖然子字符串是數字,但它們仍然是字符串值,MySQL會按字面順序對它們進行排序。對於數字排序,它們必須通過加零來強制爲數字值。

+0

非常好,謝謝。如果字符串中有更多的引號,但我後面的數字總是在第二個和第三個引號之間?我已經爲我的問題提供瞭解決方案,但我只是想知道。 – domino

+0

你的意思是像「aaa」bbb「1234」ccc「ddd''? SQL確實不擅長這種事情,但是'SUBSTRING_INDEX(SUBSTRING_INDEX(data,',',3),''',-1)'應該可以工作。 – Borodin

+0

我已經意識到,按照它的立場,我的解決方案將按數字字段在*詞法上排序,得到類似於(100,1000,10000,200,2000)的結果。要改爲用數字排序,可以通過加0來強制子字符串,比如'0 + ORDER BY SUBSTRING(data,5,3)'等等。我已經改變了我的回答來反映這一點。 – Borodin

1
SELECT *,SUBSTRING(`data`,4,3) AS num FROM table ORDER BY num ASC 
+0

如果引號之間的數字範圍是從0到1000000? – domino

+1

SUBSTR的* from *參數是基於1的,所以你需要'SUBSTR(data,5,3)',即使這樣它才能工作,如果數字字段總是相同的長度並且在相同的地方。 – Borodin

+0

你可以做什麼@鮑羅丁說。 +1 – Tim

相關問題