Как отсортировать в SQL, игнорируя статьи ('“”', и т.д.)

Это подходит много, и я вижу, что это предстало на StackOverflow перед XSLT, Ruby и Drupal, но я не вижу его специально для SQL.

Таким образом, вопрос, как Вы сортируете заголовки правильно, когда они начинают, "A", или?

Один путь состоит в том, чтобы просто ОБРЕЗАТЬ () те строки:

ORDER BY TRIM( 
  LEADING 'a ' FROM 
  TRIM( 
    LEADING 'an ' FROM 
    TRIM( 
      LEADING 'the ' FROM LOWER( title ) 
      ) 
    ) 
  )

то, которое было предложено на AskMeFi некоторое время назад (делает ему нужно это LOWER() функция?).

Я знаю, что также видел некоторую реализацию Случая/Переключателя этого, но это немного трудно к Google для.

Очевидно, существует много возможных решений. То, что было бы хорошо, является гуру SQL, высказывающими мнение, которые имеют последствия производительности.

8
задан 2 revs 23 May 2017 в 12:09
поделиться

2 ответа

Один из подходов, который я видел, заключается в том, чтобы иметь два столбца - один для отображения, а другой для сортировки:

description  |  sort_desc
----------------------------
The the      | the, The
A test         | test, A
I, Robot      | i, Robot

Я не проводил никаких реальных тестов, но это имеет то преимущество, что можно использовать индекс и не требует манипуляций со строкой каждый раз, когда вы хотите упорядочить по описанию. Если только ваша база данных не поддерживает материализованные представления (а MySQL этого не делает), реализация этой логики в виде вычисляемого столбца в представлении не даст никаких преимуществ, потому что вы не сможете индексировать вычисляемый столбец.

6
ответ дан 6 December 2019 в 00:04
поделиться

Я могу говорить только за SQL Server: вы используете LTRIM в операторах CASE. Функция LOWER не нужна, потому что по умолчанию выборки не чувствительны к регистру. Однако, если вы хотите игнорировать статьи, то я бы предложил вам использовать словарь шумовых слов и настроить каталог полнотекстового индексирования. Я не уверен, что другие реализации SQL поддерживают это.

0
ответ дан 6 December 2019 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: