Естественная сортировка не реализована в MySQL.Вы должны попробовать другой подход.В этом примере я предполагаю, что имя сервера всегда имеет один и тот же шаблон (т. Е. Srv ###).
select
name,
mid(name, 4, LENGTH(name)-3) as num,
CAST(mid(name, 4, LENGTH(name)-3) AS unsigned) as parsed_num
from server
order by parsed_num asc;
Как я уже говорил, этот подход очень специфичен, так как вы предполагаете, что первые 3 символабыть проигнорированным.Это может вводить в заблуждение и затруднить обработку при изменении шаблона.
Вы можете добавить столбец в таблицу, назовем его prefix
, в котором вы задаете префикс имени для сервера (в вашемНапример, это будет srv
для каждого).Тогда вы можете использовать:
select
name,
prefix,
mid(name, LENGTH(prefix) + 1, LENGTH(name)-LENGTH(prefix)) as num,
CAST(mid(name, LENGTH(prefix) + 1, LENGTH(name)-LENGTH(prefix)) AS unsigned) as parsed_num
from server
order by parsed_num asc;
для получения более надежного подхода.