У меня есть один VARCHAR (имя с именем и фамилией, например: John Snow) в базе данных mysql
. Я хочу сортировать по фамилии (в алфавитном порядке).
Могу ли я добавить что-то вроде "ORDER BY SECOND WORD" к запросу SQL?
Спасибо
Конечно. Один из методов:
order by substring_index(name, ' ', -1)
Обратите внимание, что это может не работать для суффиксов. Это также может не работать для средних имен. С другой стороны, названия могут отбрасывать точное совпадение второго слова, но это будет работать для них.
Как уже упоминалось, вы можете использовать функцию substring_index
для упорядочивания результатов с помощью части после первого пробела.
В вашем случае ORDER BY SECOND WORD
переведет ORDER BY substring_index(name, ' ', -1)
Но я бы этого не делал, потому что:
FIRST_NAME<space>LAST_NAME
.Если вы можете изменить схему базы данных, предпочтительнее иметь два отдельных столбца для имени и фамилии (и, возможно, среднего имени). Это будет иметь дело с №1, так как вам гарантировано, что заказ будет выполнен по имени, а не по среднему имени. Чтобы решить задачу №2, вы всегда можете создать индекс B-дерева в столбце имен, чтобы ускорить заказ.
Если вам гарантировано одно место между именем и фамилией, вы можете сделать что-то вроде
select
[fullname]
, SUBSTRING_INDEX(fullname, ' ', 1) as [firstname]
, SUBSTRING_INDEX(fullname, ' ', -1) as [lastname]
from <table>
order by [lastname]
Заполните правильные имена таблиц и столбцов.