PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL menghitung berapa kali substring muncul dalam teks

Saya sangat menyarankan untuk memeriksa jawaban yang saya posting ke "Bagaimana Anda menghitung kemunculan string berlabuh menggunakan PostgreSQL?" . Jawaban yang dipilih terbukti jauh lebih lambat daripada versi adaptasi regexp_replace() . Overhead untuk membuat baris, dan menjalankan agregat terlalu tinggi.

Cara tercepat untuk melakukannya adalah sebagai berikut...

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

Di sini kita

  1. Ambil panjang string, L1
  2. Kurangi dari L1 panjang string dengan semua pengganti dihapus L2 untuk mendapatkan L3 perbedaan panjang string.
  3. Bagi L3 dengan lamanya penggantian untuk mendapatkan kejadian

Sebagai perbandingan, itu sekitar lima kali lebih cepat daripada metode menggunakan regexp_matches() yang terlihat seperti ini.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menampilkan gambar dari database PostgreSQL, byte

  2. GALAT:kolom relasi tidak ada PostgreSQL, Tidak dapat menjalankan kueri penyisipan

  3. PostgreSQL DATEADD() Setara

  4. kueri sql yang mengelompokkan item berbeda ke dalam ember

  5. Ekstrak Tahun dari Tanggal di PostgreSQL