2012-02-22 104 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