Oracle
 sql >> база данни >  >> RDS >> Oracle

REGEXP_COUNT() Функция в Oracle

В Oracle, REGEXP_COUNT() функцията връща броя на поява на шаблон в изходен низ.

Синтаксис

Синтаксисът е така:

REGEXP_COUNT (source_char, pattern [, position [, match_param]])

Къде:

  • source_char е символен израз, който служи като стойност за търсене.
  • pattern е регулярният израз.
  • position е положително цяло число, което указва къде да започне търсенето. По подразбиране е 1 , което означава, започнете търсенето от първия знак.
  • match_param ви позволява да промените поведението на съвпадение по подразбиране на функцията. Например, той ви позволява да зададете чувствителност към малки и големи букви, как да се обработват множество редове и интервали и т.н.

Пример

Ето един основен пример за използване на REGEXP_COUNT() в Oracle:

SELECT 
    REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;

Резултат:

1

В този случай има едно съвпадение.

Регулярните изрази могат да бъдат много мощни и този пример използва много прост пример. За да използвате REGEXP_COUNT() ефективно, ще трябва да знаете правилния модел, който да използвате за желания резултат. Примерите на тази страница се фокусират върху REGEXP_COUNT() самата функция, а не върху регулярните изрази.

Няма съвпадение

Ето пример, където няма съвпадение:

SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;

Резултат:

0

Няма съвпадение, така че 0 се връща.

Множество съвпадения

Ето пример с множество съвпадения:

SELECT 
    REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;

Резултат:

2

В този случай има две съвпадения.

Начална позиция

Можете да посочите начална позиция:

SELECT 
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;

Резултат:

1

Така че тук получаваме само едно съвпадение. Това е така, защото търсенето започва едва след първото появяване (позиция 8).

Чувствителност на регистрите

REGEXP_COUNT() функцията следва правилата за определяне на съпоставяне на Oracle, които дефинират съпоставянето, което да се използва при съпоставяне на низа с шаблона.

Въпреки това, можете изрично да посочите чувствителност към малки и малки букви с незадължителния четвърти аргумент. Когато направите това, той отменя всяка чувствителност към малки и малки букви или чувствителност към акцент на определеното съпоставяне.

Можете да посочите i за съвпадение без значение на главни и c за съвпадение, чувствително към главни букви.

Ето един пример:

SELECT 
    REGEXP_COUNT('My Cats', 'c.t', 1) AS "Default",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'i') AS "Case Insensitive",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'c') AS "Case Sensitive"
FROM DUAL;

Резултат:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Тук съпоставянето ми е чувствително към главни букви. Другите два низа бяха принудени към съвпадение, независимо от главните и главни букви, съответно.

Нулеви аргументи

С изключение на четвъртия аргумент, предоставящ null за аргумент води до null :

SET NULL 'null';
SELECT 
    REGEXP_COUNT(null, 'c.t', 1, 'i') AS "1",
    REGEXP_COUNT('Cat', null, 1, 'i') AS "2",
    REGEXP_COUNT('Cat', 'c.t', null, 'i') AS "3",
    REGEXP_COUNT('Cat', 'c.t', 1, null) AS "4"
FROM DUAL;

Резултат:

      1       2       3    4 
_______ _______ _______ ____ 
   null    null    null    0

По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null възниква в резултат на SQL SELECT изявление.

Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.

Грешен брой аргументи

Предаването на никакви аргументи на функцията или твърде малко води до грешка:

SELECT REGEXP_COUNT()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Същото важи и когато предадем твърде много аргументи:

SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

Повече информация

REGEXP_COUNT() функцията (както и другата реализация на регулярни изрази на Oracle) съответства на стандарта за регулярни изрази на интерфейса на IEEE Portable Operating System Interface (POSIX) и на Указанията за регулярни изрази на Unicode на Unicode Consortium.

Вижте документацията на Oracle за повече информация и примери за REGEXP_COUNT() функция.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли булев тип в базите данни на Oracle?

  2. Настройка на SQL изявления в SQL Developer

  3. Как да напиша скрипт за вмъкване на оракул с едно поле като CLOB?

  4. Как да видите резултата/изхода на рекурсора в Oracle SQL Developer?

  5. Как мога да вмъкна няколко реда в oracle със стойност на последователност?