Как заказать по части колонны - PullRequest
3 голосов
/ 23 февраля 2012

у меня есть поле с таким содержимым: 1, 2, 100 первые два числа могут быть любого размера, третье - до 100.

Теперь мне нужно отсортировать мои поля по этому третьему числу, но, поскольку у меня есть 2 других числа, я не знаю, как это сделать.

Может быть, я мог бы использовать что-то вроде REGEXP или что-то еще? До сих пор я пробовал SUBSTRING, но так как мои два числа могут быть любой длины, что-то вроде

order by SUBSTRING(my_field, 4)

будет работать, но если у меня есть такие числа, как 32, 451, 30, он принимает неправильные числа

Также я использую php для создания своего запроса, но я не думаю, что это имеет значение.

Ответы [ 4 ]

9 голосов
/ 23 февраля 2012

Вы можете использовать SUBSTRING_INDEX . Так что-то вроде:

SUBSTRING_INDEX(my_field, ',', -1)

РЕДАКТИРОВАТЬ: если у вас есть пробелы, вы можете также сделать некоторые обрезки.

4 голосов
/ 23 февраля 2012
ORDER BY SUBSTRING_INDEX(my_field,',',-1)+0  ASC -- or DESC

Используйте SUBSTRING_INDEX, который захватывает подстроку до n-го вхождения разделителя (в вашем случае, запятую), или, в случае отрицательного n, он возвращает подстроку после n-го вхождения от конца.

Чтобы понять, что я имею в виду, попробуйте:

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

Причина, по которой +0 есть в ORDER BY, заключается в том, что mysql сортирует их как числа, а не строки.

2 голосов
/ 23 февраля 2012

Это должно работать:

order by CONVERT(SUBSTRING(my_field, LOCATE(",", my_field, RIGHT)), INTEGER)
1 голос
/ 23 февраля 2012
SELECT *
FROM (
  SELECT
     SUBSTRING(my_field, 4) AS my_field,
     ... 
   FROM
     ...
   WHERE
     ...
) temp_table
ORDER BY my_field
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...