PostgreSQL
 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 по дължината на замяната, за да получите събитията

За сравнение това е около пет пъти по-бързо отколкото метода за използване на regexp_matches() което изглежда така.

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. Функция STRING_AGG() в PostgreSQL

  2. PostgreSQL как да видите кои заявки са изпълнени

  3. Първични ключове за препращане към външни ключове на POSTGRESQL на две различни таблици

  4. Набор на JDBCTemplate вложен POJO с BeanPropertyRowMapper

  5. Използване на колона псевдоним в клаузата where в Postgresql