2012-02-22 47 views
2

我有場像這樣內容的一部分訂購:1, 2, 100前兩個數字可以是任意大小第三個可高達100如何通過一列

現在我需要通過這個第三給我的字段進行排序號碼,但因爲我有2個其他號碼,我不知道該怎麼做。

也許我可以使用類似REGEXP或其他什麼東西? 到目前爲止,我已經試過SUBSTRING但因爲我的兩個號碼可以是任何lenght像

order by SUBSTRING(my_field, 4) 

的工作,但如果我有號碼,如32, 451, 30需要錯號

而且我使用PHP構建我的查詢,但我不認爲這很重要。

+4

聽起來像一個壞的DB計劃...... – 2012-02-22 23:37:05

回答

8

您可以使用SUBSTRING_INDEX。所以像這樣:

SUBSTRING_INDEX(my_field, ',', -1) 

編輯:如果你有空間,你可能也想做一些修整。

+0

感謝這就是我一直在尋找:) – Linas 2012-02-22 23:41:18

+0

肯定,很高興它幫助。 – northpole 2012-02-22 23:41:52

+1

此外,你可能也想嘗試+ 0作爲@ mathematical.coffee建議。這是一個可愛的小動作。 – northpole 2012-02-22 23:45:15

1
SELECT * 
FROM (
    SELECT 
    SUBSTRING(my_field, 4) AS my_field, 
    ... 
    FROM 
    ... 
    WHERE 
    ... 
) temp_table 
ORDER BY my_field 
1

這應該工作:

order by CONVERT(SUBSTRING(my_field, LOCATE(",", my_field, RIGHT)), INTEGER) 
3
ORDER BY SUBSTRING_INDEX(my_field,',',-1)+0 ASC -- or DESC 

使用SUBSTRING_INDEX,這抓起串到分隔符的第n個occurence(在你的情況,逗號),或在的情況下,負N,它會後,從最後返回的子第n occurence。

要明白我的意思嘗試:

SELECT SUBSTRING_INDEX(my_field,',',-1) 
FROM my_table 

究其原因,在ORDER BY一個+0是讓MySQL的排序,這些數字,而不是字符串。

+0

+ 0是輝煌的,我完全忘了這一點小動作! – northpole 2012-02-22 23:44:37