ホームページ > データベース > mysql チュートリアル > 正規表現を使用すると、PostgreSQL の LIKE 句のパターン マッチングをどのように改善できるでしょうか?

正規表現を使用すると、PostgreSQL の LIKE 句のパターン マッチングをどのように改善できるでしょうか?

Linda Hamilton
リリース: 2024-12-20 14:44:12
オリジナル
674 人が閲覧しました

How Can Regular Expressions Improve Pattern Matching in PostgreSQL's LIKE Clause?

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]'
ログイン後にコピー

この式では:

  • ^ ... 文字列の先頭と一致します
  • 1 ... 以外の任意の文字に一致します。 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 サイトの他の関連記事を参照してください。

    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート