Это подходит много, и я вижу, что это предстало на 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, высказывающими мнение, которые имеют последствия производительности.
Один из подходов, который я видел, заключается в том, чтобы иметь два столбца - один для отображения, а другой для сортировки:
description | sort_desc
----------------------------
The the | the, The
A test | test, A
I, Robot | i, Robot
Я не проводил никаких реальных тестов, но это имеет то преимущество, что можно использовать индекс и не требует манипуляций со строкой каждый раз, когда вы хотите упорядочить по описанию. Если только ваша база данных не поддерживает материализованные представления (а MySQL этого не делает), реализация этой логики в виде вычисляемого столбца в представлении не даст никаких преимуществ, потому что вы не сможете индексировать вычисляемый столбец.
Я могу говорить только за SQL Server: вы используете LTRIM в операторах CASE. Функция LOWER не нужна, потому что по умолчанию выборки не чувствительны к регистру. Однако, если вы хотите игнорировать статьи, то я бы предложил вам использовать словарь шумовых слов и настроить каталог полнотекстового индексирования. Я не уверен, что другие реализации SQL поддерживают это.