テーブルの内容を変更したくない (したがって、クエリの効率が若干低下する) ことを望まないと仮定すると、次の方法でうまくいくはずです。
(テーブルを変更する余裕がある場合は、この回答の最後にある提案を参照してください)
SELECT Title
FROM myTable
WHERE (Title LIKE 'x%' OR Title LIKE 'THE x%')
-- AND Title NOT LIKE 'THE [^T]%'
ORDER BY Title
注:
- x は目的の文字を指定します (例: LIKE 'A%' など)
- "AND TITLE NOT LIKE" 追加条件は、"X" が文字 "T" の場合にのみ必要です (それ以外の場合は機能的に冗長ですが、は結果を変更しません) -
のサポート[^xyz]
(つまり、文字 x、y、または z ではない) が不明なので、を正の同等の say に置き換えることができます。[^T]
[A-RS-Z0-9]
他にも考慮すべきストップ ワードがいくつかありますが (「A」、「AN」、「OF」など)、本や映画のタイトルの場合は、「THE」のみを考慮するのが一般的です。他の記事を処理する必要がある場合は、次のようにロジックを拡張できます。
SELECT Title
FROM myTable
WHERE (Title LIKE 'x%'
OR Title LIKE 'THE x%'
OR Title LIKE 'A x%'
OR Title LIKE 'AN x%')
-- the following is only needed when "x" is either the letter T or A.
-- AND (Title NOT LIKE 'THE [^T]%'
-- AND Title NOT LIKE 'A [^A]%'
-- AND Title NOT LIKE 'AN [^A]%'
-- )
ORDER BY Title
テーブルの内容を変更できる場合は、より良い解決策があります。これらのいくつかは、1 つまたは複数の余分な列を事前に計算することを意味します (新しいレコードが追加されたときなどに、それらを維持します)。
- たとえば、「sort_column」アプローチについては、この投稿の Cletus の回答を参照してください。余分な列には、望ましくない先頭のノイズ ワードが削除されたタイトルが含まれています。OP の頭文字検索問題におけるフィルタリング フィールドとしての目的に加えて、この列は、頭文字に関係のないフィルターによって生成されたタイトルのリストを、より友好的/賢明な方法で並べ替えるためにも使用できます。および/またはタイトルの先頭 (年で検索してください)。
- 上記のバリエーションは、「効果的な」最初の文字 (望ましくないノイズを過ぎたもの) のみを保存することです。これにより、列は小さくなりますが、汎用性も低くなります。
- タイトル列自体を更新して、タイトルの変更された形式を保存することができます。これにより、不要な先頭のノイズ ワードが文字列の末尾の括弧内に移動されます。この慣行は、書誌タイプのカタログでは非常に一般的です。