98
ORACLE
MONTHS_BETWEEN Tato funkce vrací číselnou hodnotu, kolik měsíců uplynulo mezi dvěma daty. Číslo, které funkce vrací, je velmi přesné a má proto obvykle řadu desetinných míst. Pro menší přesnost můžeme aplikovat funkci ROUND nebo TRUNC. SELECT MONTHS_BETWEEN ( SYSDATE, TO_DATE('1.1.2008','DD.MM.YYYY') ) FROM dual;
Obr. 5.29: Aplikace funkce MONTHS_BETWEEN
SYSDATE Tuto funkci jsme již také několikrát využili, vrací aktuální systémové datum. Pokud chceme jiný formát data, musíme užít funkci TO_CHAR. SELECT SYSDATE FROM dual;
5.7.3
Funkce pro práci s řetězci
V řadě případů je nutné vstupní nebo výstupní řetězce dotazů různým způsobem upravovat a formátovat. Typickým příkladem je převod na malá či velká písmena, výběr podřetězce, počet znaků apod.
CHAR Tato funkce vrací znak, parametrem je pozice znaku v ASCII tabulce. SELECT CHAR(65) FROM dual;
LENGTH Funkce vrací délku řetězce, který je uveden jako parametr funkce. SELECT LENGTH('Ahoj') FROM dual;
Obr. 5.30: Aplikace funkce LENGTH
5. Dotazujeme se báze dat (jazyk SQL)
Ukázka elektronické knihy, UID: KOS181145
LOWER, UPPER Tyto funkce převedou řetězec v parametru na malá písmena (LOWER) nebo na velká písmena (UPPER). Tyto funkce se často využívají v klauzuli WHERE jako součást operátoru LIKE pro vvhledání řetězce fulltextově. SELECT UPPER('Ahoj světe') FROM dual; SELECT LOWER('VŠECHNA VELKÁ') FROM dual;
99 5. Dotazujeme se báze dat (jazyk SQL)
ORACLE
REPLACE Tato funkce dokáže v zadaném řetězci najít podřetězec a nahradit jej řetězcem jiným. Obecná definice vypadá takto: SELECT REPLACE ( zdrojový_řetězec, hledaný řetězec, náhrada_za_hledaný_řetězec ) FROM tabulka; Například tato forma funkce REPLACE nám vypíše na výstupu větu „Petr je doma“. SELECT REPLACE('David je doma.','David','Petr') FROM dual;
RTRIM, LTRIM Tato funkce odstraní zprava (RTRIM) nebo zleva (LTRIM) prázdné znaky. SELECT RTRIM('Text. SELECT LTRIM('
') FROM dual; Text.') FROM dual;
SUBSTRING Funkce SUBSTRING dokáže v daném řetězci najít určitou pozici a vyseknout určitý počet znaků. Tím vzniká podřetězec jako podmnožina znaků ze vstupního řetězce. SELECT SUBSTRING ( řetězec, počátek_podřetězce, počet_znaků_podřetězce ) FROM dual; Konkrétně pak může využití této funkce vypadat například takto: SELECT SUBSTRING('ABCDEFGH',5,2)FROM dual;
5.7.4
Převodní funkce
Pokud nám nevyhovuje formát dat, se kterými pracujeme, musíme si vypomoci převodními funkcemi databáze. Takovéto funkce převedou datový typ vstupu či výstupu nebo nám umožní zadání data, znaků či číselných hodnot.
5.7 Funkce
Ukázka elektronické knihy, UID: KOS181145
100
ORACLE
BIN_TO_NUM Tato funkce zajistí převod čísla ve dvojkové soustavě do soustavy dekadické. Vstupní číslo ve dvojkové soustavě má každou číslici odděleno čárkou. SELECT BIN_TO_NUM(1,1,1) FROM dual;
CAST Tato funkce je určena pro jednoduchou konverzi datových typů. Můžeme tak převést kupříkladu číslo na řetězec. SELECT CAST(pocet_stran AS CHAR(3)) FROM knihy;
TO_DATE Funkce překonvertuje textový řetězec na datum. Využívá se v drtivé většině vkládání data a času do databázového sloupce, jenž je definován jako DATE. INSERT INTO tabulka (datum) VALUES (TO_DATE('15.9.2008','DD.MM.YYYY')); Tento příkaz vypíše datum ve formě, na jakou jsme ve střední Evropě zvyklí. Prvním parametrem je konkrétní datum, druhý parametr popisuje, jak je tento vstupní řetězec naformátován. K formátování se využívají symboly, stručný výčet uvedeme i v následující tabulce: DAY
Název dne velkými písmeny
DD
Den v rozsahu 01–31
DDD
Den v roce v rozsahu 1–365
HH12
Hodiny ve dvanáctihodinovém formátu
HH24
Hodiny ve čtyřiadvacetihodinovém formátu
MI
Minuty v rozsahu 0–59
MM
Kalendářní měsíc v rozsahu 0–12
MONTH
Název měsíce velkými písmeny
SS
Sekundy vyjádřené čísly 0–59
W
Číslo týdne v rámci měsíce
WW
Číslo týdne v rámci roku
YY
Rok vyjádřený v rozsahu 0–99
YYYY
Rok v plném číselném formátu
Tyto formátovací symboly lze dobře užít i u funkce TO_CHAR, která následuje.
TO_CHAR Funkce překonvertuje znakové datové typy do znakové sady nebo zajistí korektní zobrazení data či některé části z něj. Využívá se nejčastěji při výběrech SELECT jako formátovací řetězec: SELECT TO_CHAR(datum_narozeni,'YYYY')) AS ROK FROM vypujcitel;
5. Dotazujeme se báze dat (jazyk SQL)
Ukázka elektronické knihy, UID: KOS181145