クエリ:
SELECT * FROM table WHERE ? LIKE (col || '%');
(PostgresおよびMySQL)として書き直すことができます:
SELECT * FROM table WHERE col = left(?, length(col));
コメントしたように、最初のフォームも機能するはずです。ただし、特別な意味を持つ文字があるため、注意が必要な場合があります。 LIKE
の場合
(少なくとも_%\
)列内 脱出する必要があります。 MySQLとPostgresの両方で動作させたい場合は、両方の実装で特殊文字を観察する必要があります。したがって、2番目の形式はエラーが発生しにくいです。 プリンシパルに。
パフォーマンス
これらのクエリはどちらもcol
のインデックスを使用できません 、どちらもsargable
ではありません 。この問題は、指定された検索パターン?
のすべての可能なプレフィックスを見つけることで再評価できます。 、dba.SEのこの関連する回答(Postgresの場合)と同様の方法で最適化できます: