7. blok Funkce. Studijní cíl



Podobné dokumenty
6. blok část C Množinové operátory

4. blok část A Logické operátory

6. blok část B Vnořené dotazy

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

5. blok Souhrnné a skupinové dotazy

Databázové systémy a SQL

Databázové systémy a SQL

MS EXCEL_vybrané matematické funkce

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Funkce pro práci s jednotlivými řádky

Dotazy tvorba nových polí (vypočítané pole)

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

FUNKCE 2. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

Algoritmizace a programování

Tabulkový procesor. Základní rysy

UŽIVATELSKY DEFINOVANÉ FUNKCE

KIV/ZIS cvičení 5. Tomáš Potužák

Algoritmizace a programování

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

2. cvičení z ZI1 - Excel

Microsoft Office. Excel vlastní formát buněk

Sada 1 - Základy programování

Znak Slovy Popis Zdroj Výsledek Formátova cí řetězec v CZ verzi Excelu

Operátory ROLLUP a CUBE

5 Přehled operátorů, příkazy, přetypování

LabView jako programovací jazyk II

Úvod do programování. Lekce 1

Aritmetické operátory

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Excel Matematické operátory. Excel předdefinované funkce

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Úvod do programování 6. hodina

MS EXCEL Funkce. Je jich daleko více, ale pokud zvládneme sinus, zvládneme i sinus hyperbolický atd..

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly

Základní vzorce a funkce v tabulkovém procesoru

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

zeleně jsou označené funkce, které patří do zlatého fondu Excelu tyto funkce jsou sice zajímavé, ale pravděpodobně je moc často nepoužijete

Přednáška 3: Limita a spojitost

Textové, datumové a časové funkce

ZÁPOČTOVÁ PRÁCE z UIR

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Programy na PODMÍNĚNÝ příkaz IF a CASE

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

1.1.3 Práce s kalkulátorem

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Tiskové sestavy. Zdroj záznamu pro tiskovou sestavu. Průvodce sestavou. Použití databází

ANOTACE vytvořených/inovovaných materiálů

KALKULÁTORY EXP LOCAL SIN

Čísla, reprezentace, zjednodušené výpočty

Fz =a z + a z +...+a z +a z =

Práce s kalkulátorem

Mgr. et Mgr. Jan Petrov, LL.M. Ph.D. BYZNYS A PRÁVO

Úvod do programování 7. hodina

Jednoduché cykly

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Čísla v plovoucířádovéčárce. INP 2008 FIT VUT v Brně

Matematika (KMI/PMATE)

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

CZ.1.07/1.5.00/

Excel tabulkový procesor

LEKCE 6. Operátory. V této lekci najdete:

12. blok Pokročilé konstrukce SQL dotazů - část II

0.1 Funkce a její vlastnosti

Wolfram Alpha. v podobě html stránky, samotný výsledek je často doplněn o další informace (např. graf, jiné možné zobrazení výsledku a

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Matematické a statistické funkce

Text může být postupně upravován a doplňován. Datum poslední úpravy najdete u odkazu na stažení souboru. Veronika Sobotíková

Desetinná čísla. pro celá čísla jsme používali typ int. pro desetinná čísla používáme typ double

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Manuál pro zaokrouhlování

Logaritmy a věty o logaritmech

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý

Univerzitní licence MATLABu. Pište mail na: se žádostí o nejnovější licenci MATLABu.

Databázové systémy. Cvičení 6: SQL

Dotaz se souhrny a dotaz křížový

Variace. Číselné výrazy

Kontingenční tabulky v MS Excel 2010

VY_32_INOVACE_In 6.,7.13 Vzorce vložení funkce

Návod k programu Graph, verze 4.3

Stručný obsah Úvod Úvod do SQL 1. Seznámení s jazykem SQL 2. Začínáme s dotazy 3. Výrazy, podmínky a operátory

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Gymnázium Jiřího Ortena, Kutná Hora

Matematika I (KMI/PMATE)

HROMADNÉ ÚPRAVY NAJÍT A NAHRADIT

Funkce Arcsin. Předpoklady: Některé dosud probírané funkce můžeme spojit do dvojic: 4 je číslo, jehož druhá mocnina se rovná 4.

Matematika. ochrana životního prostředí analytická chemie chemická technologie Forma vzdělávání:

Excel - pokračování. Př. Porovnání cestovních kanceláří ohraničení tabulky, úprava šířky sloupců, sestrojení grafu

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

M - Příprava na pololetní písemku č. 1

Příklad: Součet náhodných čísel ve vektoru s počtem prvků, které zadá uživatel, pomocí sum() a pomocí cyklu for. Ověříme, že příliš výpisů na

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

I. Kalkulátor Rebell SC2040 manuál s příklady Tlačítko: MODE CLR

x (D(f) D(g)) : (f + g)(x) = f(x) + g(x), (2) rozdíl funkcí f g znamená: x (D(f) D(g)) : (f g)(x) = f(x) g(x), (3) součin funkcí f.

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

MATA Př 3. Číselné soustavy. Desítková soustava (dekadická) základ 10, číslice 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Bakalářská matematika I

Excel tabulkový procesor

Transkript:

7. blok Funkce Studijní cíl Tento blok popisuje základní vestavěné funkce databázového prostředí Oracle. Popisuje rozdělení na základní skupiny, na funkce analytické, konverzní, funkce pro práci s datem a časem, matematické, řetězcové a další. Vybrané funkce jsou popsány podrobně včetně příkladů. Doba nutná k nastudování 3-4 hodiny Průvodce studiem Při studiu tohoto bloku se předpokládá, že čtenář je obeznámen se základní syntaxí příkazu, spojováním tabulek, použitím vyhledávacích podmínek a základních funkcí. 1. Vestavěné funkce Při psaní databázových dotazů se můžeme dostat do situace, kdy nám samotný jazyk SQL nebude dostačovat. Pro tyto případy nabízí databázové servery řadu vestavěných funkcí. Jelikož identifikátory funkcí ani jejich práce není nijak definována standardem SQL, funkce se na různých databázových platformách liší. My si budeme dále povídat o vestavěných funkcích na databázových serverech Oracle. Vestavěné funkce pomáhají řešit problémy, na které SQL nestačí, případně zjednodušují práci. V prostředí databázového serveru Oracle můžeme vestavěné funkce rozdělit do následujících kategorií: Analytické Konverzní Funkce pro práci s datem a časem Matematické Funkce pro práci s hodnotou NULL Řetězcové funkce Objektové funkce Funkce pro práci s formátem XML Ne všemi kategoriemi se budeme zabývat podrobně. Kategorie jako objektové funkce a funkce pro práci s XML přesahují rámec tohoto bloku. 1

2. Analytické funkce Jedná se o sadu funkcí pracujících vždy nad množinou dat, které slouží k sumarizaci. Výstupem z analytických funkcí jsou tedy souhrnná data. Blíže se budeme zabývat analytickými funkcemi v některé z dalších kapitol. Zde si uvedeme pouze přehled nejdůležitějších funkcí. Funkce AVG() COUNT() DENSE_RANK() FIRST() LAG() LAST() LEAD() MAX() MIN() RANK() ROW_NUMBER() SUM() VARIANCE() Popis Průměrná hodnota Počet hodnot Skutečné pořadí hodnoty v řadě hodnot Vrací první hodnotu podle pořadí funkce DENSE_RANK Umožňuje přístup k datům z předchozích řádků výstupu Vrací poslední hodnotu podle pořadí funkce DENSE_RANK Umožňuje přístup k datům z následujících řádků výstupu Maximální hodnota Minimální hodnota Pořadí hodnoty v sadě hodnot Pořadové číslo řádku ve výstupu Součet hodnot Rozptyl 2

3. Konverzní funkce Jak napovídá jejich název, slouží konverzní funkce ke konverzi dat mezi datovými typy. Převádět můžeme čísla na řetězce a zpět, data na řetězce a zpět atd. V přehledu si představíme význam jednotlivých konverzních funkcí a nejpoužívanější si předvedeme na příkladu. Funkce Popis ASCIISTR() Převede ASCII řetězec na ASCII řetězec ve znakové sadě databáze BIN_TO_NUM() Převede bitový vektor na číslo CAST() Přetypování COMPOSE() Převede řetězec na UNICODE CONVERT() Převede řetězec z jedné znakové sady do druhé DECOMPOSE() Převede UNICODE řetězec do řetězce HEXTORAW() Převede řetězec obsahující hexadecimální číslice na typ RAW NUMTOYMINTERVAL() Převede číslo na typ INTERVAL YEAR TO MONTH SCN_TO_TIMESTAMP() Převádí SCN na časové razítko (typ TIMESTAMP) TIMESTAMP_TO_SCN() Převádí časové razítko na SCN TO_BINARY_DOUBLE() Převede hodnotu na typ BINARY_DOUBLE TO_CHAR() Převádí datum na řetězec TO_DATE() Převádí řetězec na datum TO_DSINTERVAL() Převádí řetězec na typ INTERVAL DAY TO SECOND TO_NUMBER() Převádí řetězec na číslo TO_TIMESTAMP() Převádí řetězec na časové razítko (TIMESTAMP) TO_TIMESTAMP_TZ() Převádí řetězec na časové razítko s časovou zónou (TIMESTAMP WITH TIMEZONE) 3.1. CAST Pro převody mezi jednotlivými vestavěnými datovými typy slouží funkce CAST(). Činnost si předvedeme na několika příkladech. Převeďte aktuální datum na řetězec. CAST( sysdate AS VARCHAR2(30)) FROM dual; 3

Převeďte číselní řetězec na číslo. CAST( '1234,5' AS NUMBER(5,1)) FROM dual; 3.2. CONVERT Funkce CONVERT() slouží pro převod řetězců mezi znakovými sadami. Tato funkce je velice užitečná, pokud například chceme data zobrazovat v aplikaci, která používá jinou znakovou sadu, než je znaková sada databáze. CONVERT('ě š č ř ž ý á í é', 'US7ASCII', 'UTF8') FROM dual; 3.3. TIMESTAMP_TO_SCN, SCN_TO_TIMESTAMP Obě funkce slouží k převodu mezi časovými razítky a SCN. Pod zkratkou SCN rozumíme v Oracle system change number. Je to číslo, které se v databázi inkrementuje vždy, když dojde ke změně a tato změna je zapsána do protokolu. Také je inkrementováno po potvrzení transakce. Číslo potom slouží hlavně pro obnovu databáze. 4

3.4. TO_CHAR, TO_DATE Jsou funkce, které slouží pro převod z data na řetězec a zpět. Pro převod se využívá formátovacích řetězců. Symbol Popis D Pořadové číslo dne v týdnu (1 7) DD Den v měsíci (1 31) DAY Slovní reprezentace dne v týdnu HH Hodiny ve formátu 0-12 HH24 Hodiny ve formátu 0-24 MI Minuty MM Měsíc (0 12) MONTH Slovní reprezentace měsíce SS Sekundy FF Milisekundy YY Rok vyjádřený dvěma číslicemi YYYY Rok vyjádřený čtyřmi číslicemi Q Čtvrtletí vyjádřené číslicí (1-4) Použití si ukažme na příkladech. Zobrazte aktuální datum a čas ve formátu Den.Měsíc.Rok Hodina:minuta. TO_CHAR(sysdate, 'DD.MM.YYYY HH24:MI') FROM dual; Zobrazte název aktuálního dne v týdnu a název aktuálního měsíce. TO_CHAR(sysdate, 'DAY, MONTH') FROM dual; Převeďte řetězec 10:11, 01.01.12 na datum. TO_DATE( '10:11, 01.01.12', 'HH24:MI, DD.MM.YY') FROM dual; 5

4. Funkce pro práci s datem a časem Část funkcí pro práci s datem a časem jsme již zařadili do kategorie konverzních funkcí. Jedná se o funkce, které slouží k převodu typů data do řetězců a zpět. Tady v této části si naopak ukážeme funkce, které pracují již přímo s datem a časem. Funkce ADD_MONTHS() CURRENT_DATE CURRENT_TIMESTAMP EXTRACT() GREATEST() INTERVAL LEAST() LOCALTIMESTAMP MONTHS_BETWEEM() NEW_TIME() NEXT_DAY() SESSIONTIMEZONE SYSDATE SYSTIMESTAMP ROUND() TRUNC() Popis K zadanému datu přidá zadaný počet měsíců a nové datum vrátí Vrátí aktuální datum a čas z časové zóny serveru Vrátí aktuální časové razítko včetně časové zóny Extrahuje z data vybranou část Vrátí nejvyšší hodnoty ze zadaného výčtu Přidává k datu zvolený interval Vrátí nejnižší hodnotu ze zadaného výčtu Vrací aktuální časové razítko bez časové zóny Vrací počet měsíců mezi dvěma daty Převádí čas mezi časovými zónami Vrátí datum následujícího zadaného dne v týdnu Vrací aktuální časovou zónu Aktuální systémové datum a čas Aktuální systémové časové razítko Zaokrouhlí datum na zvolenou přesnost Ze zadaného data ořeže čas 4.1. ADD_MONTHS Funkce přičítá k zadanému datu daný počet měsíců. Pokud chceme měsíce odečítat, můžeme zadat záporný počet měsíců. Zadáme-li desetinné číslo, je automaticky oříznuto na nejbližší menší celé číslo. Nelze tedy přičíst polovinu měsíce. Fungování si ukažme na příkladech. K aktuálnímu datu přičtěte 14 měsíců. ADD_MONTHS(sysdate, 14) FROM dual; Od aktuálního data odečtěte jeden měsíc. ADD_MONTHS(sysdate, -1) FROM dual; 6

4.2. CURRENT_DATE, CURRENT_TIMESTAMP, SESSIONTIMEZONE, SYSDATE, SYSTIMESTAMP, LOCALTIMESTAMP Identifikátory CURRENT_DATE, CURRENT_TIMESTAMP, SESSIONTIMEZONE, SYSDATE, SYSTIMESTAMP a LOCALTIMESTAMP nepředstavují funkce jako takové. Jedná se o speciální systémové proměnné, které nám poskytují informace týkající se data a času. Jejich význam si nejlépe ukážeme na příkladu: CURRENT_DATE, CURRENT_TIMESTAMP, SESSIONTIMEZONE, SYSDATE, SYSTIMESTAMP, LOCALTIMESTAMP FROM dual; Z výsledků je zřejmé, že proměnné SYSDATE a CURRENT_DATE jsou identické a můžeme je zaměňovat. Proměnná SESSIONTIMEZONE nemá žádný ekvivalent a zobrazuje název časového pásma. Rozdíl mezi CURRENT_TIMESTAMP a SYSTIMESTAMP je také zřejmý. CURRENT_TIMESTAMP nedisponuje přesností na tisíciny sekundy a zobrazuje název časového pásma, zatímco SYSTIMESTAMP disponuje přesností na tisíciny sekundy a zobrazuje informaci o časovém posunu. LOCALTIMESTAMP zobrazuje aktuální časové razítko s přesností na jednotky sekund bez dodatečných informací. 7

4.3. EXTRACT Funkce EXTRACT(), jak již napovídá název, slouží k extrakci jednotlivých části ze zadaného data. Z data můžeme získat rok, měsíc, den, hodiny, minuty a sekundy. Ukažme si všechny možnosti na složitějším příkladu: 'Aktuální datum a čas', TO_CHAR(systimestamp) FROM dual UNION 'EXTRACT(YEAR FROM systimestamp)', TO_CHAR(EXTRACT(YEAR FROM systimestamp)) FROM dual //rok UNION 'EXTRACT(MONTH FROM systimestamp)', TO_CHAR(EXTRACT(MONTH FROM systimestamp)) FROM dual //měsíc UNION 'EXTRACT(DAY FROM systimestamp)', TO_CHAR(EXTRACT(DAY FROM systimestamp)) FROM dual //den UNION 'EXTRACT(HOUR FROM systimestamp)', TO_CHAR(EXTRACT(HOUR FROM systimestamp)) FROM dual //hodiny UNION 'EXTRACT(MINUTE FROM systimestamp)', TO_CHAR(EXTRACT(MINUTE FROM systimestamp)) FROM dual //minuty UNION 'EXTRACT(SECOND FROM systimestamp)', TO_CHAR(EXTRACT(SECOND FROM systimestamp)) FROM dual;//sekundy 8

4.4. ROUND O funkci ROUND() můžeme tvrdit, že je přetížená. Existuje totiž její verze jak pro čísla, tak pro datum. V této části se budeme zabývat funkcí pro zaokrouhlování data. Datum a čas je možné zaokrouhlit na specifikovanou přesnost. Přesnost je definována zástupným řetězcem stejným, jako používá funkce TO_CHAR(). Nejnižší přesnost, na kterou je možné zaokrouhlovat, jsou minuty. Fungování funkce ROUND si ukažme na několika příkladech. Určete datum, kdy začíná čtvrtletí, ve kterém se nachází datum 14. 8. 2012. ROUND(TO_DATE('14.08.2012','DD.MM.YYYY'), 'Q') FROM dual; Určete datum prvního dne aktuálního měsíce. ROUND(sysdate, 'MM') FROM dual; 9

5. Matematické funkce Sada matematických funkcí obsahuje běžně známé funkce jako goniometrické funkce, funkce pro umocňování, logaritmické funkce a statistické funkce. V následujícím přehledu si ukážeme nejpoužívanější z nich. Funkce Popis ABS() Absolutní hodnota ACOS() Arc cosinus ASIN() Arc sinus ATAN() Arc tangens ATAN2() Arc tangens parametru děleného druhým parametrem AVG() Průměrná hodnota BITAND() Bitový součin CEIL() Zaokrouhlení na nejbližší menší nebo stejné celé číslo CORR() Výpočet korelačního koeficientu COS() Cosinus COSH() Hyperbolický cosinus EXP() Vrací e umocněné na zadaný exponent FLOOR() Zaokrouhlení na nejbližší větší nebo stejné celé číslo GREATEST() Vrací nejvyšší hodnotu ze zadaných parametrů LEAST() Vrací nejmenší hodnotu ze zadaných parametrů LN() Přirozený logaritmus LOG() Logaritmus bez definovaného základu MAX() Maximální hodnota MEDIAN() Medián MIN() Minimální hodnota MOD() Zbytek po celočíselném dělení POWER() Umocnění čísla REMAINDER() Zbytek po celočíselném dělení ROUND() Zaokrouhlení SIGN() Vrací znaménko SIN() Sinus SINH() Hyperbolický sinus SQRT() Druhá odmocnina STDDEV() Směrodatná odchylka SUM() Suma TAN() Tangens TANH() Hyperbolický tangens TRUNC() Oříznutí čísla na zvolený počet desetinných míst VARIANCE() Rozptyl 10

5.1. Goniometrické funkce Do skupiny goniometrických funkcí patří SIN(), COS(), TAN(), SINH(), COSH(), TANH(). Parametrem těchto funkcí je vždy úhel zadaný v radiánech. Pokud chceme použít jako parametr stupně, musíme provést přepočet: Určete cosinus 135. COS(135 * 3.14159265359/180) FROM dual; 5.2. Logaritmické a exponenciální funkce Mezi matematickými funkcemi samozřejmě nesmí chybět funkce pro výpočet logaritmu. K dispozici máme výpočet přirozeného logaritmu LN(), kde základ tvoří Eulerovo číslo e a běžný logaritmus LOG(), kde si základ volíme parametrem. Databázový server také poskytuje inverzní funkci k přirozenému logaritmu EXP(), která slouží k umocňování Eulerova číslo e. LN(2), LOG(EXP(1), 2), LOG(10,10), EXP(2) FROM dual; 5.3. CEIL, FLOOR Funkce CEIL() a FLOOR() slouží k zaokrouhlování desetinných čísel. Funkce CEIL() zaokrouhluje tak, že výsledkem je nebližší větší nebo stejné celé číslo. Funkce FLOOR() pracuje obráceně a vrací nejbližší menší, nebo stejné číslo. Ukažme si fungování na příkladu. Určete nejbližší menší a nejbližší větší celé číslo od čísla 7.3890560989306502272304274605750078132. CEIL(7.3890560989306502272304274605750078132), FLOOR(7.3890560989306502272304274605750078132) FROM dual; 11

5.4. GREATEST, LEAST Pokud potřebujeme vybrat ze sady hodnot největší, nebo nejmenší hodnotu, použijeme funkci GREATEST() pro vybrání nejvyšší LEAST()a pro nejnižší hodnotu ze seznamu. Seznam, ze kterého funkce hodnotu vybírá, je zadán formou parametrů. Počet parametrů, tedy délka seznamu, není omezen. Přetížené verze těchto funkcí pracují také s datem a časem. Způsob volání těchto funkcí si předvedeme na triviálním příkladu. GREATEST(1,2,3,4,5,6,7), LEAST(1,2,3,4,5,6,7) FROM dual; 5.5. Umocňování čísel Pro práci s mocninami máme k dispozici dvě funkce. Funkci POWER(), která slouží pro umocnění čísla na libovolný exponent a funkci SQRT(), která počítá druhou odmocninu. Funkce POWER() vyžaduje dva parametry, kde prvním parametrem je umocňované číslo a druhým parametrem je exponent. Pokud chceme počítat jinou, než druhou odmocninu, musíme použít místo SQRT() funkci POWER() a zadat obrácenou hodnotu exponentu. Ukažme si na jednoduchém příkladu. Určete druhou, třetí a čtvrtou mocninu čísla 3. POWER(3,2), POWER(3,3), POWER(3,4) FROM dual; Určete druhou, třetí a čtvrtou odmocninu čísla 4892. SQRT(4892), POWER(4892,1/3), POWER(4892,1/4) FROM dual; Výsledky ze druhého dotazu jsou záměrně zaokrouhleny na dvě desetinná místa. Ve skutečnoti pracují funkce SQRT() a POWER() na maximální počet desetinných míst. 12

5.6. MOD, REMAINDER Funkce MOD() i funkce REMAINDER() slouží k výpočtu zbytku po celočíselném dělení. Každé funkce však k výpočtu přistupuje rozdílně. Zatímco funkce MOD() využívá při výpočtu funkci FLOOR() a vrací tedy vždycky kladný zbytek, funkce REMAINDER() používá funkci CEIL() a v některých případech vrací zbytek záporný. Jako názornou ukázku si zvolíme jednoduchý příklad 8 / 5. Podívejme se, co bude výstupem z těchto funkcí. MOD(8,5), REMAINDER(8, 5) FROM dual; Výstup z funkce MOD() je jasný. Tedy 8 / 5 = 1, zbytek 3. Méně jasný je již výstup z funkce REMAINDER(). Pro pochopení fungování této funkce, si rozebereme jednotlivé kroky výpočtu. 1. Nejdříve se vypočítá podíl zadaných čísel 2. Na tento podíl se aplikuje funkce FLOOR() nebo CEIL() 3. Výsledek této funkce se vynásobí dělitelem a odečte od děleného čísla. 'CEIL' as "fce", 8/5 as "a/b", CEIL(8/5) as "fce(a/b)", 8-(CEIL(8/5)*5) as "a-(fce(a/b)*a)", 'MOD' as "Alternativa" FROM dual UNION 'FLOOR', 8/5, FLOOR(8/5), 8-(FLOOR(8/5)*5), 'REMAINDER' FROM dual; 13

6. Hodnota NULL a funkce pro práci s hodnotou NULL Nejdříve si řekněme, co si můžeme představit pod pojmem hodnota NULL. V databázových systémech slouží hodnota NULL k identifikaci stavu, kdy není zadána hodnota, buňka tabulky je tedy prázdná. Můžeme sice namítat, že tato hodnota není třeba, protože místo číselné hodnoty můžeme použít nulu a v řetězcové hodnotě můžeme použít prázdný řetězec. Ale jak bychom potom rozpoznaly, zda uživatelem zadaná nula představuje stav prázdné buňky, nebo zda se jedná o korektní hodnotu? Na další úskalí bychom narazili u složitých datových typů jako je datum a čas, objekty atd. Než si představíme funkce pro práci s hodnotou NULL, povíme si některá pravidla pro práci s touto hodnotou. Pokud použijeme hodnotu NULL ve výpočtu, výsledkem bude vždy NULL Pokud spojíme řetězec s hodnotu NULL, hodnota NULL se ignoruje Každá agregační funkce přistupuje k hodnotě NULL jinak. Příkladem je funkce COUNT(*) a COUNT(atribut), kde COUNT(*) hodnotu NULL neignoruje a COUNT(atribut) ano Při použití hodnoty NULL v podmínce není možné použít znaménko je rovno, ale je nutné použít konstrukci IS NULL Dalším využitím hodnoty NULL je: Nahrazení chybějících sloupců při použití množinových operátorů Vynucení vyplnění atributu tabulky (použitím definice NOT NULL) 6.1. Funkce pro práci s hodnotou NULL Základní funkce pracující s hodnotou NULL jsou čtyři NVL(), NVL2(), NULLIF() s LNNVL(). 14

6.2. NVL První z funkcí pro práci s hodnotou NULL je funkce NVL(). Prvním vstupním parametrem je název atributu a druhým může být hodnota, nebo také název atributu. Funkce potom vyhodnocuje výraz tak, že pokud hodnota v prvním parametru je rovna NULL, výstupem bude hodnota parametru druhého. Pokud nebude rovna NULL, výstupem bude hodnota prvního parametru. Příklady si budeme demonstrovat na tabulkou PRODUKTY, která má následující strukturu. Zobrazte označeni a cenu produktů z tabulky PRODUKTY. Pokud nebude cena zadána, vypište nulu. oznaceni, NVL(cena,0) FROM produkty; 6.3. NVL2 NVL2() má na rozdíl od funkce NVL() parametry tři. Prvním parametrem je název testovaného atributu nebo hodnota. Druhým parametrem je hodnota, která bude zobrazena, pokud nebude první argument nabývat hodnoty NULL. Třetí parametr bude zobrazen, pokud nebude hodnota prvního parametru rovna hodnotě NULL. 15

Zobrazte označeni a cenu produktů z tabulky PRODUKTY. K ceně produktu připočtěte zdražení 14%. Pokud cena není zadána, vypište 0. oznaceni, NVL2(cena,cena*1.14,0) FROM produkty; 6.4. NULLIF Funkce NULLIF() přijímá dva parametry a vrací hodnotu NULL v případě, že se zadané parametry rovnají. Pokud se nerovnají, vrací první parametr. 6.5. LNNVL LNNVL() jako jediná nepracuje na principu podmínek, ale slouží k vyhodnocování podmínek, kdy se ve výrazu mohou objevit hodnoty NULL. Pokud tuto funkci použijeme do podmínky, dotaz vrátí ty řádky, které ve výrazu obsahují hodnotu NULL a běžnou podmínkou by tedy neprošly. Zobrazte označeni a cenu produktů z tabulky PRODUKTY, kde cena je větší než 0. oznaceni, cena FROM produkty WHERE cena > 0; Do výsledku se dostaly všechny produkty, teré mají cenu vyplněnou. Pokud bychom ale chtěly vědět, které se do této sady výsledků nedostaly, použijeme funkce LNNVL(). oznaceni, cena FROM produkty WHERE LNNVL(cena > 0); 16

7. Řetězcové funkce Funkce Popis ASCII() Převádí znak na číselný ASCII kód CHR() Převádí číselný ASCII kód na znak CONCAT() Spojení dvou řetězců INITCAP() První písmena slov v řetězci převede na velká, ostatní na malá INSTR() Vyhledávání v řetězci LENGTH() Délka řetězce LOWER() Převod na malá písmena LPAD() Rozšíření řetězců zleva LTRIM() Odstranění bílých znaků zleva REGEXP_COUNT() Počet výskytů podle regulárního výrazu REGEXP_INSTR() Vyhledávání v řetězci podle regulárního výrazu REGEXP_REPLACE() Nahrazení v řetězci podle regulárního výrazu REGEXP_SUBSTR() Získání části řetězce podle regulárního výrazu REPLACE() Nahrazení v řetězci REVERSE() Výpis řetězce odzadu RPAD() Rozšíření řetězců zprava RTRIM() Ořezání bílých znaků zprava SUBSTR() Získání podřetězce TRIM() Ořezání bílých znaků z obou konců řetězce UPPER() Převod na velká písmena ROURY Spojení řetězců VSIZE() Velikost řetězce v bitech 7.1. ASCII, CHR Jsou vzájemně inverzní funkce. ASCII() slouží k převodu řetězce na číselnou reprezentaci. Funkce CHR() slouží k převodu číselné reprezentace zpět na znak. ASCII('A'), CHR(65) FROM dual; 7.2. Spojování řetězců Spojení řetězců můžeme realizovat pomocí funkce CONCAT() nebo můžeme použít operátor roury. Princip fungování obou možností je identický. Jelikož funkce CONCAT() umožňuje současné spojení pouze dvou řetězců, je použití operátoru roura komfortnější. Pro spojení více řetězců pomocí funkce CONCAT(), můžeme funkce vnořovat. 17

CONCAT('Funkce pro ', 'práci s řetězci'), 'Funkce' ' pro ' 'práci' ' s' ' řetězci' FROM dual; 7.3. Změna velikosti znaků v řetězci Na převod velkých znaků na malé a zpět, disponuje databázový server několika funkcemi. Můžeme převádět buď celé řetězce na malá písmena pomocí LOWER(), celé řetězce na velká písmena pomocí UPPER() nebo kombinace obou přístupů pomocí funkce INITCAP(). INITCAP() převede celý řetězec na malá písmena a potom u každého slova první písmeno na velké. UPPER('Funkce pro práci s řetězci') FROM dual; LOWER('Funkce pro práci s řetězci') FROM dual; INITCAP('Funkce pro práci s řetězci') FROM dual; 7.4. LPAD, RPAD Slouží pro rozšiřování řetězců na danou velikost přidáváním znaků. LPAD() doplňuje znaky zleva, RPAD() zprava. Znak i velikost, na kterou budeme znak rozšiřovat, zadáme pomocí parametrů. Aby bylo možné řetězec rozšířit, musí být jeho délka větší než 0. Počet, na kolik znaků budeme rozšiřovat, musí být větší než 0. 18

Pomocí těchto funkcí si můžeme vytvořit například jednoduchý graf. oznaceni, RPAD(' ', NVL(cena/1000,0)+1, '*') FROM produkty; Graf zobrazuje ke každému produktu jednu hvězdičku za každých 1000 jednotek ceny. 7.5. REPLACE V mnoha případech potřebujeme v řetězci nahradit některé znaky, případně potřebujeme nahradit celé části řetězců. Pro tento případ existuje funkce REPLACE(), která nahradí všechny výskyty vzoru v řetězci zadaným řetězcem. Fungování funkce si předvedeme na příkladu, kde ve věte nahradíme znak mezery, znakem podržítko. REPLACE('Funkce pro práci s řetězci',' ','_') FROM dual; 7.6. INSTR Funkce INSTR() slouží k vyhledávání vzoru uvnitř řetězce a vrací jeho pozici. Pomocí parametrů můžeme definovat, odkud se začne vyhledávat a pozici, kolikátého výskytu si přejeme zobrazit. Prvním parametrem funkce INSTR() je zdrojový řetězec, ve kterém budeme vyhledávat. Druhým parametrem je vzor, který budeme vyhledávat. Třetí parametr je již nepovinný a definuje pozici, od které se začne vyhledávat. Pokud tento parametr necháme prázdný, začne se vyhledávat od začátku řetězce. Chceme-li vyhledávat od konce řetězce, použijeme zápornou hodnotu. Poslední parametr je také nepovinný a slouží pro případ, že chceme určit, kolikátý výskyt nás zajímá. Pokud tedy chceme znát polohu druhého výskytu vzoru, zadáme do parametru 19

dvojku. Pokud poslední parametr nevyplníme, automaticky se zobrazuje pozice prvního výskytu. Pokud není vzor nalezen, funkce vrátí hodnotu 0. Nalezněte pozici druhého výskytu písmene p v řetězci Funkce pro práci s řetězci počítáno odzadu. INSTR('Funkce pro práci s řetězci','p',-1,2) FROM dual; Fukci INSTR() se hodí pro kombinaci s funkcí SUBSTR(). 7.7. SUBSTR Mohou nastat situace, kdy potřebujeme získat část z řetězce. Například pokud bude v řetězci uložen název souboru a budeme chtít znát jen příponu. K získání části řetězce slouží funkce SUBSTR(). Funkce má tři parametry. První je povinný a představuje řetězec, ze kterého chceme získat část. Druhý, také povinný parametr, je pozice, od které začneme získávat podřetězec. Pokud chceme podřetězec získávat odzadu, zvolíme zápornou hodnotu. Můžeme získat například poslední tři znaky zadáním -3. Poslední parametr není povinný a definuje délku podřetězce. Databázový server Oracle čísluje pozice znaků v řetězci od 1. První znak je tedy na pozici 1. Získejte posledních 10 znaků z řetězce Funkce pro práci s řetězci. SUBSTR('Funkce pro práci s řetězci',-10) FROM dual; 20

Jak bylo zmíněno již dříve, nabízí se kombinace funkcí INSTR() a SUBSTR(). Kombinaci si předveďme na příkladu. Z názvu souboru my.stats.conf získejte příponu. SUBSTR('my.stats.conf', INSTR('my.stats.conf','.',-1,1)+1 ) FROM dual; Pomocí funkce INSTR() jsme nalezli první výskyt tečky odzadu a tuto nalezenou pozici použijeme jako počáteční pozici hledané přípony. Pojmy k zapamatování Příkazy a funkce: TO_DATE(), TO_NUMBER(), TO_CHAR(), CAST(), EXTRACT(), SYSDATE, SYSTIMESTAMP, NVL(), NVL2(), LPAD(), RPAD(), TRIM(), SUBSTR(),, AVG(), MIN(), MAX() Problém: použití základních vestavěných funkcí v běžných dotazech Shrnutí V této lekci jsme si představili základní dělení vestavěných funkcí databázového systému Oracle. Analytické funkce slouží k výpočtu součtu, průměru, minimální a maximální hodnoty nebo k určení počtu hodnot ve sloupci nebo ve výsledku dotazu. Mezi analytické funkce patří: AVG(), MIN(), MAX(), RANK(), Konverzní funkce slouží k převodu mezi datovými typy. Hlavním využitím je formátování data a času a převod řetězců do data a času. Mezi konverzní funkce patří například: TO_CHAR(), TO_DATE(), CAST(),... Funkce pro práci s datem a časem slouží pro úpravu data a času, přidávání časových intervalů a převod mezi časem a intervalem. Mezi tyto funkce patří: EXTRACT(), ADD_MONTH(), INTERVAL() a také pseudoslouce SYSDATE a SYSTIMESTAMP, které poskytují informace o aktuálním datu a času. 21

Matematické funkce poskytují implementace základních matematických operací, jako jsou goniometrické funkce, logaritmus, exponenciální funkce, výběr minima, maxima a jiné. Konkrétně do této kategorie patří: SIN(), COS(), POWER(), EXP(), SQRT(), MIN(), MAX(), ROUND(), Řetězcové funkce slouží pro změnu velikosti písmen, získávání podřetězců a vyhledávání v řetězci, odstraňování bílých znaků a spojování. Konkrétně do této kategorie patří: LOWER(), UPPER(), INSTR(), SUBSTR(), REPLACE(), CONCAT(),, TRIM(), Funkce pro práci s hodnotou NULL slouží k vyhodnocování podmínek s hodnotou NULL a testování proměnných na hodnotu NULL. Patří sem: NVL(), NVL2(), IFNULL(), Otázky na procvičení 1. Pomocí jakého zástupného řetězce byste převedli řetězec 2012-12-23 na datum? Využijte funkci TO_DATE(). 2. Pomocí jaké funkce můžete převést řetězec na číslo? 3. Jaký je rozdíl mezi hodnotami SYSDATE a SYSTIMESTAMP? 4. K čemu slouží funkce EXTRACT()? 5. Jak byste parametrizovali funkce POWER() pro výpočet 4 odmocniny čísla 6? 6. Jaký je rozdíl mezi funkcí MOD() a REMAINDER()? 7. Jakou funkcí převedete písmen A do číselného kódu ascii? 8. Jaká je výhoda operátoru proti funkci CONCAT()? 9. K čemu slouží funkce REPLACE()? 10. Jaká je rozdíl mezi funkcí NVL() a NVL2()? Odkazy a další studijní prameny http://www.techonthenet.com/oracle (syntaxe příkazů SQL jazyka a funkcí) http://www.sqlcourse.com (interaktivni SQL trénink) http://www.oracle.com/technetwork/database/enterpriseedition/documentation (dokumentace k databázové platformě Oracle) http://www.penguin.cz/noviny/?id=chip/index (seriál Databáze standardu SQL z časopisu CHIP) 22

Odkazy a další studijní prameny ŠIMŮNEK, M. SQL, kompletní kapesní průvodce. Grada Publishing, 1999. ISBN 80-7169-692-7. STEPHENS, K.R., PLEW, R.R. Naučte se SQL za 21 dní. Praha: Computer Press, 2004. ISBN 80-7226-870-8. GROFF, J.R., WEINBERG, P.N. SQL - kompletní průvodce. Praha: Computer Press, 2005. ISBN 80-251-0369-2. 23