foo
その列にインデックスを持つ、何らかの文字列型のcolumnがあります。SELECT
テーブルWHERE
からfoo
列に接頭辞を付けたいとします'pre'
。明らかに、インデックスはここで役立つはずです。
接頭辞で検索する最も明白な方法は次のとおりです。
SELECT * FROM tab WHERE foo LIKE 'pre%';
残念ながら、これはインデックスを使用するように最適化されていません (少なくとも Oracle または Postgres では)。
ただし、以下は機能します。
SELECT * FROM tab WHERE 'pre' <= foo AND foo < 'prf';
しかし、これを達成するためのより良い方法はありますか、または上記をよりエレガントにする方法はありますか? 特に:
'pre'
からへの関数が必要です'prf'
が、これは基になる照合に対して機能する必要があります。'prz'
また、例えばを検索する場合、上限はでなければならないなど、上記よりも複雑です'psa'
。- これをストアド関数/プロシージャに抽象化しても、インデックスにアクセスできますか? だから私はのようなものを書くことができます
... WHERE prefix('pre', foo);
か?
すべての DBMS に対する回答を歓迎します。