PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL đếm số lần chuỗi con xuất hiện trong văn bản

Tôi thực sự khuyên bạn nên kiểm tra câu trả lời này mà tôi đã đăng cho "Làm cách nào để bạn đếm số lần xuất hiện của một chuỗi cố định bằng PostgreSQL?" . Câu trả lời đã chọn được chứng minh là chậm hơn nhiều so với phiên bản điều chỉnh của regexp_replace() . Chi phí tạo các hàng và chạy tổng hợp chỉ đơn giản là quá cao.

Cách nhanh nhất để thực hiện việc này như sau ...

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

Đây chúng tôi

  1. Lấy độ dài của chuỗi, L1
  2. Trừ L1 độ dài của chuỗi với tất cả các thay thế bị xóa L2 để lấy L3 sự khác biệt về độ dài chuỗi.
  3. Chia L3 theo khoảng thời gian thay thế để nhận được các lần xuất hiện

Để so sánh, nhanh hơn khoảng năm lần so với phương pháp sử dụng regexp_matches() trông giống như thế này.

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. Có phải thiết kế tồi khi sử dụng các mảng trong cơ sở dữ liệu không?

  2. Tôi lấy nguồn libpq ở đâu?

  3. Làm cách nào để chuyển ứng dụng ray hiện có của tôi lên heroku? (sqlite đến postgres)

  4. Xoay vòng trên nhiều cột bằng cách sử dụng Tablefunc

  5. Barman Cloud - Phần 2:Cloud Backup