sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLはテキストに部分文字列が出現する回数をカウントします

    「PostgreSQLを使用してアンカー文字列の出現をどのようにカウントしますか?」に投稿したこの回答を確認することを強くお勧めします。 。選択された回答は、適合バージョンのregexp_replace()よりも大幅に遅いことが示されました。 。行の作成と集計の実行のオーバーヘッドが高すぎるだけです。

    これを行う最も速い方法は次のとおりです...

    SELECT
      (length(str) - length(replace(str, replacestr, '')) )::int
      / length(replacestr)
    FROM ( VALUES
      ('foobarbaz', 'ba')
    ) AS t(str, replacestr);
    

    ここに

    1. 文字列の長さL1を取得します
    2. L1から減算 すべての置換が削除された文字列の長さL2 L3を取得するには 文字列の長さの違い。
    3. L3を分割します オカレンスを取得するための置換の長さ

    比較のために、それは約5倍速い regexp_matches()を使用する方法よりも このように見えます。

    SELECT count(*)
    FROM ( VALUES
      ('foobarbaz', 'ba')
    ) AS t(str, replacestr)
    CROSS JOIN LATERAL regexp_matches(str, replacestr, 'g');
    


    1. パッケージのマルチレベルの依存関係を見つけるためのスクリプト

    2. T-SQLを使用してSQLServerエージェントジョブを実行する方法

    3. (IDではなく)インデックスでSQLiteの行を取得する方法

    4. SQL INSERTクエリに重複レコードを挿入しないようにする方法(5つの簡単な方法)