У меня есть следующие данные:
GROUP 1 - FINANCE
GROUP 10 - SALES
GROUP 11 - MARKETING
GROUP 12 - HR
GROUP 2 - OPS
Когда ORDERING
данных в MySQL задает вопрос, он, верно, возвращает эти данные в указанном выше порядке. Тем не менее, есть ли вообще (без изменения данных, которые вы можете заказать в Numeric
порядке?
GROUP 1 - FINANCE
GROUP 2 - OPS
GROUP 10 - SALES
GROUP 11 - MARKETING
GROUP 12 - HR
Спасибо!
Добавление ORDER BY CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(column, ' ', 2), ' ', -1) AS UNSIGNED)
должно помочь.
SUBSTRING_INDEX
функции SUBSTRING_INDEX
с правильными параметрами позволяют разбивать и извлекать строки. в этом случае числовая часть после первой части строки в этом случае будет извлечена "GROUP".
запрос
SELECT
records.data
FROM (
SELECT
"GROUP 1 - FINANCE" AS data
UNION
SELECT
"GROUP 10 - SALES" AS data
UNION
SELECT
"GROUP 11 - MARKETING" AS data
UNION
SELECT
"GROUP 12 - HR" AS data
UNION
SELECT
"GROUP 2 - OPS" AS data
) AS records
ORDER BY
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(records.data, ' ', 2), ' ', -1) AS UNSIGNED)
см. демо https://www.db-fiddle.com/f/sGqUeTKaDjihRA3Bg3Myca/0
Начиная с MySQL 8.0, вы можете использовать REPLACE
и REGEXP_SUBSTR
для ORDER BY
в столбце:
SELECT *
FROM table_name
ORDER BY CAST(TRIM(REPLACE(REGEXP_SUBSTR(column_name, '(GROUP )([0-9]+)'), 'GROUP', '')) AS UNSIGNED)
INT
как тип CAST (вы получаете ошибку разбора), вместо этого вам нужно использовать UNSIGNED
. см. демонстрацию db-fiddle.com/f/jkzdNKhdeTJbsko4GbkNAg/0