Сортировка запроса на основе пропуска слова

#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.