Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyDatabázové systémy v biomedicíně Vyhledávání v textu Standardní funkce INSTR a operátor LIKE

Logo Matematická biologie

Standardní funkce INSTR a operátor LIKE

Funkci INSTR v databázi ORACLE, respektive STRPOS v případě POSTGRESQL, jsme si představili již ve třetí kapitole. Pro připomenutí tato funkce umožňuje prohledávat text na výskyt specifikovaného podřetězce, kterým může být jeden až N znaků. Výsledkem funkce je pozice nalezeného podřetězce nebo nula v případě, kdy podřetězec nebyl nalezen. Funkce má dva povinné parametry, prohledávaný text a hledaný podřetězec. Ve funkci INSTR v případě potřeby můžeme využít další dva parametry, kterými jsou startovací pozice vyhledávání a pořadí výskytu:

SELECT INSTR('strč prst skrz krk', 'r', 5, 2) FROM DUAL

Tento příklad hledá druhý výskyt písmena 'r' od páté pozice řetězce 'strč prst skrz krk'. Výsledkem je 13, což je pozice druhého písmena 'r' hledaného od pátého znaku, tedy 'r' ve slově skrz. Výchozí pozice může být i záporné číslo, v tom případě se pozice počítá od konce řetězce a vyhledávání probíhá od konce na začátek:  

SELECT INSTR('strč prst skrz krk', 'r', -5, 2) FROM DUAL

Příkaz provede hledání od pátého znaku od konce, tedy od písmene 'z', směrem k začátku řetězce a výsledkem je pozice 7, tedy písmeno 'r' ve slově prst.
Funkci INSTR můžeme použít i v definici podmínky WHERE:

SELECT * FROM tabulka WHERE INSTR(sloupec, 'r', 1, 2)  > 0

Tento příklad vrátí řádky tabulky, které ve sloupci obsahují alespoň dvě písmena "r" (hledáme pozici druhého písmena 'r').
Obvyklejším způsobem vyhledávání řádků, které obsahují v textovém sloupci určitý podřetězec, je použití operátoru LIKE a zástupných znaků. Jako zástupný znak se v případě ORACLE databáze používá znak "_" (podtržítko) a znak "%" (procento). Podtržítko nahrazuje právě jeden libovolný znak, procento 0 až N libovolných znaků. Syntaxe operátoru LIKE je následující:

sloupec LIKE '%podřetězec%'

Operátor LIKE používáme při definici vyhledávacích podmínek za klíčovým slovem WHERE:

SELECT * FROM tabulka WHERE sloupec LIKE '_rk'

Tento příkaz najde všechny řádky, které obsahují ve sloupci třípísmenné slovo končící na "rk".

V případě, kdy potřebujeme vyhledávat v textu samotný zástupný znak, definujeme pro operátor LIKE ještě tzv. ESCAPE znak, který když umístíme před zástupný znak, vrátí zástupnému znaku jeho původní význam. Pokud tedy potřebujeme najít řádky, které obsahují ve sloupci symbol procento, definujeme podmínku následovně:

SELECT * FROM tabulka WHERE sloupec LIKE '%\%%' ESCAPE '\'

Jako ESCAPE znak zde slouží zpětné lomítko, které zbavuje druhý znak procenta jeho funkce zástupného znaku. První a třetí znak procento jsou interpretovány jako zástupné znaky, procento se tedy může ve sloupci vyskytovat kdekoliv (může ho předcházet i následovat libovolné množství jiných znaků).

Pomocí operátoru LIKE bychom se mohli pokusit hledat řetězce obsahující datum následujícím zpsůsobem:

SELECT * FROM tabulka WHERE sloupec LIKE '%__.__.____%'.

Hledáme takto dva znaky, tečku, dva znaky, tečku a čtyři znaky umístěné libovolně v textu. Tento způsob nám však může vrátit mnoho falešně pozitivních výsledků (např. IP adresa 88.45.12.45 bude taká vyhovovat uvedenému vzoru) a naopak mnohé řádky přehlédne (např. 1.2.2000 má pouze jednu číslici před první i druhou tečkou).  Pro dosažení lepších výsledků musíme použít tzv. regulární výrazy.

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity