PostgreSQL LIKE 句の正規表現
PostgreSQL では、文字列比較のパターン マッチングに LIKE 句がよく使用されます。ただし、正規表現を使用して LIKE 句の柔軟性を高めることもできます。正規表現の使用が有益であることが判明する一般的なシナリオを詳しく見てみましょう。
問題:
次のクエリ スニペットを考えてみましょう:
SELECT * FROM table WHERE value LIKE '00[1-9]%' -- (third character should not be 0)
このクエリは、値列が「00」で始まり、その後に 1 ~ 9 の数字が続く行を取得することを目的としています (ただし、 0) の後に任意の数の文字が続きます。ただし、クエリは意図した文字列 '0090D0DF143A' と一致しません。
解決策:
この問題を解決するには、正規表現演算子 ~ は LIKE 演算子の代わりに使用する必要があります。さらに、正規表現自体を変更して、目的の動作を実現できます。
SELECT * FROM tbl WHERE value ~ '^00[^0]'
この式では:
ベスト プラクティス:
代わりに、明確さとパフォーマンスの最適化の両方のために、複数の LIKE 式を使用する次のクエリをお勧めします:
SELECT * FROM tbl WHERE value LIKE '00%' -- starting with '00' AND value NOT LIKE '000%' -- third character is not '0'
LIKE 句と NOT LIKE 句の両方を使用すると、より少ない句を使用して候補セットを絞り込むことで効率を確保できます。
インデックスを使用すると、この例のような単純な正規表現を含むクエリを高速化できることに注意してください。詳細については、LIKE と ~ の違いに関する PostgreSQL ドキュメントを参照してください。
以上が正規表現を使用すると、PostgreSQL の LIKE 句のパターン マッチングをどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。