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

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

В Oracle, REGEXP_SUBSTR() функцията връща подниз от низ въз основа на модел на регулярен израз.

Той разширява функционалността на SUBSTR() функция, като ни позволява да използваме модели на регулярни изрази.

Синтаксис

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

REGEXP_SUBSTR ( source_char, pattern
                [, position
                   [, occurrence
                      [, match_param
                         [, subexpr ]
                      ]
                   ]
                ]
              )

Къде:

  • source_char е символен израз, който служи като стойност за търсене.
  • pattern е регулярният израз.
  • position е положително цяло число, което указва къде да започне търсенето. По подразбиране е 1 , което означава, започнете търсенето от първия знак.
  • occurrence е неотрицателно цяло число, което указва кое събитие да се търси. По подразбиране е 1 , което означава търсене за първото срещане.
  • match_param ви позволява да промените поведението на съвпадение по подразбиране на функцията. Например, той ви позволява да зададете чувствителност към малки и големи букви, как се обработват множество редове и интервали и т.н. Този аргумент работи по същия начин, както когато се използва с REGEXP_COUNT() функция. Вижте документацията на Oracle за тази функция за повече информация.
  • За pattern с подизрази, subexpr е неотрицателно цяло число от 0 до 9, което показва кой подизраз в pattern трябва да бъде върната от функцията. Този аргумент работи по същия начин, както когато се използва с REGEXP_INSTR() функция. Вижте документацията на Oracle за повече информация за тази функция.

Пример

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

SELECT 
    REGEXP_SUBSTR('Cats and dogs', 'd.g')
FROM DUAL;

Резултат:

dog

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

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

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

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

SET NULL 'null';
SELECT REGEXP_SUBSTR('My dogs like dregs', 't.g')
FROM DUAL;

Резултат:

null

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

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

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

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

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

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

Резултат:

dog

Можете обаче да посочите кое събитие да замените, ако е необходимо:

SELECT 
REGEXP_SUBSTR('My dogs have dags', 'd.g', 1, 2)
FROM DUAL;

Резултат:

dag

Имайте предвид, че добавих два аргумента тук; 1 и 2 . 1 определя местонахождението в низа, за да започне търсенето (в този случай на първия знак). 2 е това, което определя кое събитие да се търси. В този случай се търси второто появяване.

Ето какво се случва, ако започна търсенето след първото срещане:

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

Резултат:

null

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

Ако променя последния аргумент на 1 , тогава получаваме съвпадение (тъй като това е първото срещане след посочената начална позиция):

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

Резултат:

dag

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

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

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

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

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

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

Резултат:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
null       Cat                 null             

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

Подизрази

Ето пример за използване на шестия аргумент за връщане на конкретен модел на подизрази:

SELECT REGEXP_SUBSTR(
    'catdogcow', 
    '(c.t)(d.g)(c.w)', 
    1, 1, 'i', 1
    )
FROM DUAL;

Резултат:

cat

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

Ето какво се случва, ако посоча третия подизраз:

SELECT REGEXP_SUBSTR(
    'catdogcow', 
    '(c.t)(d.g)(c.w)', 
    1, 1, 'i', 3
    )
FROM DUAL;

Резултат:

cow

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

Ако някой аргумент е null , резултатът е null :

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

Резултат:

      1       2       3       4       5       6 
_______ _______ _______ _______ _______ _______ 
null    null    null    null    null    null   

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

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

SELECT REGEXP_SUBSTR()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT REGEXP_SUBSTR()
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_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, 'oops')
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, '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_SUBSTR() функцията (както и другата реализация на регулярни изрази на Oracle) съответства на стандарта за регулярни изрази на интерфейса на IEEE Portable Operating System Interface (POSIX) и на Указанията за регулярни изрази на Unicode на Unicode Consortium.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да предадете списък с обекти на Java към съхранената процедура на Oracle с помощта на MyBatis?

  2. `show create table` еквивалент в oracle sql

  3. Функцията Oracle REPLACE() не обработва връщане на карета и превеждане на ред

  4. CASE срещу DECODE

  5. Как да убия работещ оператор SELECT