REGEXP_LIKE

SQL

FUNCTION REGEXP_LIKE(IN text CLOB, IN pattern CHAR(N), [ IN options CHAR(3)]); RETURNS BOOLEAN;


Parametry

text
text, se kterým se porovnává regulární výraz
pattern
regulární výraz
options
příznaky ovlivňující práci s regulárním výrazem


Popis

Funkce hledá v řetězci znaků text část popsanou regulárním výrazem pattern.

Funkce je postavena na knihovně PCRE (Perl-Compatible Regular Expression) odpovídající verzi 5.8 programu PERL.

Regulární výraz musí být vytvořen podle pravidel jazyka PERL. Ve stručnosti:

Znaky ^ a $ na začátku a konci regulárního výrazu dovolují jej "zakotvit" tak, že musí pokrývat celý rozsah textu od začátku resp. do konce. Funkce tedy může hledat substring, prefix, suffix nebo shodu celého textu s regulárním výrazem.

Pokud text nebo regulární výraz nejsou v Unicode, pak se předpokládá, že regulární výraz lze zkonvertovat do znakové sady textu.

Je-li uveden parametr options, pak obsahuje znaky, které upravují fungování regulárního výrazu:

Prohledávání textu pomocí regulárního výrazu je rychlé v tom smyslu, že bez ohledu na složitost výrazu se text prochází v lineárním čase (tj. v čase přímo úměrném jeho délce). Vyhledávání v textech pomocí podmínek zadaných regulárním výrazem však nevyužívá indexy a proto vede na postupné prohledávání jednoho textu po druhém. V rozsáhlých textových databázích to není příliš efektivní metoda, alternativnou může být použití fulltextových nástrojů.

Funkce REGEXP_LIKE je flexibilnější a efektivnější než funkce LIKE.



Návratová hodnota

Funkce vrací výsledek srovnání textu s regulárním výrazem - TRUE pokud si odpovídají, FALSE pokud ne. Funkce vrátí UNKNOWN pokud je v syntaxi regulárního výrazu chyba.



Příklad

SELECT * FROM Txtab
WHERE Regexp_like(name, 'A(be|braham|\.) +Lincoln', 'i')

Dotaz vybere z tabulky Txtab ty řádky, které ve sloupci Name obsahují řetězec 'Abe Lincoln', 'Abraham Lincoln' nebo 'A. Lincoln', přičemž mezi oběma slovy smí být jedna nebo více mezer. Velikost písmen se přitom ignoruje.



Příklad

SELECT jmeno FROM Adresy
WHERE REGEXP_LIKE(jmeno,'\b[sš][tť]astn[yýaá]','i');

Dotaz vybere z tabulky Adresy osoby s příjmením Šťastný nebo Šťastná. Protože při vkládání mohlo dojít ke zkomolení diakritiky, hledají se i kombinace bez diakritiky. Aby nedošlo k vybrání příjmení např. Nešťastný, konstrukce /b na začátku regulárního výrazu určí, že před [sš] je hranice slova. Vyhoví jména: 'Šťastný', 'Stastny', 'Ing. Jan Šťastný', 'Stastna-Mala', 'STASTNA', 'Jiří Šťastný, CSc', 'stastny'.



Příklad

SELECT firma FROM Adresy
WHERE REGEXP_LIKE(firma,'[0-9]+');
//WHERE REGEXP_LIKE(firma,'[0-9]{1,}');
//WHERE REGEXP_LIKE(firma,'[[:digit:]]+');
//WHERE REGEXP_LIKE(firma,'\d+');

Dotaz vybere z tabulky Adresy ty firmy, které mají ve svém názvu alespoň jednu číslici. Vyhoví názvy: 'Software602 a.s.', 'TELE3', 'VÚ 1444', 'Závody 29.augusta, s.p.'. V ukázce jsou použity 4 ekvivalentní zápisy regulárního výrazu.