如何按列的一部分订购

时间:2012-02-22 23:33:09

标签: mysql sql

我的字段包含这样的内容:1, 2, 100前两个数字可以是任意大小,第三个数字最多可以是100个。

现在我需要按照第三个数字对字段进行排序,但由于我有另外两个数字,我不知道该怎么做。

也许我可以使用像REGEXP之类的东西? 到目前为止,我已经尝试SUBSTRING,但因为我的两个数字可以是任何类似

的长度
order by SUBSTRING(my_field, 4)

会有效,但如果我有像32, 451, 30这样的数字,则需要错误的数字

我也使用php来构建我的查询,但我认为这不重要。

4 个答案:

答案 0 :(得分:9)

您可以使用SUBSTRING_INDEX。如下所示:

SUBSTRING_INDEX(my_field, ',', -1)

编辑:如果你有空格,你可能也想做一些修剪。

答案 1 :(得分:4)

ORDER BY SUBSTRING_INDEX(my_field,',',-1)+0  ASC -- or DESC

使用SUBSTRING_INDEX,它将子字符串抓取到分隔符的第n个出现位置(在您的情况下为逗号),或者在负n的情况下,它将返回之后的子字符串 / em>从最后出现的第n个。

要明白我的意思,请尝试:

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

+0中存在ORDER BY的原因是mysql将这些作为数字排序,而不是字符串。

答案 2 :(得分:2)

这应该有效:

order by CONVERT(SUBSTRING(my_field, LOCATE(",", my_field, RIGHT)), INTEGER)

答案 3 :(得分:1)

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