#mysql #database #sorting
#mysql #База данных #сортировка
Вопрос:
если у меня есть следующие результирующие наборы:
id, name
1, The Popper
2, Brittany
3, Fledgler
4, The Nightingale
Как мне отсортировать их по имени, чтобы оно игнорировало слово «The» и сортировало следующим образом:
id, name
1, Britanny
2, Fledler
3, The Nightingale
4, The Popper
Заранее спасибо. Я использую MySQL
Комментарии:
1. Я имею в виду, что имена должны быть отсортированы таким образом, чтобы в них игнорировалось слово «The».
Ответ №1:
Попробуйте:
SELECT id, name
FROM myTable
ORDER BY TRIM(LEADING 'The ' FROM name)
Больше информации здесь.
Комментарии:
1. 1; стоит упомянуть, что это будет происходить медленно на огромных наборах данных, поскольку, вероятно, не удастся использовать индексы.
Ответ №2:
SELECT id,title,
CASE WHEN LOWER(SUBSTRING_INDEX(Title, ' ', 1))
IN ('a', 'an', 'the')
THEN CONCAT(
SUBSTRING(Title, INSTR(Title, ' ') 1),
', ',
SUBSTRING_INDEX(Title, ' ', 1)
)
ELSE Title
END AS TitleSort
FROM books
ORDER BY TitleSort
Ответ №3:
Есть несколько ответов, которые предлагают «живую» обрезку, которая будет работать нормально.
Однако, если важна производительность (огромное количество строк), рассмотрите возможность создания отдельного столбца, title_sort
который содержит заголовок с The
и другие неучтенные слова, уже удаленные.
Таким образом, компонент database engine может в полной мере использовать индексацию и другие оптимизации.
Ответ №4:
Используйте это —> http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim удалить «The» из начала ключевого слова в предложении Order by.