Skip to main content

SQL (Ukázka, strana 99)

Page 1

V systému MySQL fungují funkce LEFT a RIGHT stejně; problém s nadbytečnými mezerami u sloupce typu CHAR zde odpadá. Pro vyjmutí několika znaků zprostřed textového řetězce je v SQL Serveru určena funkce SUBSTRING. Funkce má tři parametry: prvním je textová hodnota, druhým poloha prvního znaku pro vyjmutí a třetím počet vyjímaných znaků. Při vyjmutí např. druhého a třetího znaku z textu je práce s funkcí jasná. Jak ale funkci použít, aby vyjímala zbytek textu od zadaného znaku do konce bez ohledu na jeho délku? Jednoduše: jako počet vyjímaných znaků zadáte libovolné hausnumero, větší než maximální délka textu. Pokud jako příklad vezmeme uvedenou tabulku s textovými sloupci, dotaz SELECT SUBSTRING(pole1,3,1) AS jeden_znak,SUBSTRING(pole1,3,2000) AS do_konce FROM Tabulka

poskytne tento výsledek: jeden_znak c c c

do_konce cd cdefg cdefghij

V systému MySQL a databázi MS Access je pro vyjímání textu zprostředka k dispozici funkce MID9 (text, poloha prvního znaku, počet vyjímaných znaků), která funguje obdobně, jako funkce SUBSTRING v SQL Serveru. Pokud se počet vyjímaných znaků vynechá, vyjme se část textu od zadané pozice do konce. Funkce MID v MySQL může mít druhý parametr záporný, zadaná poloha se pak počítá od konce řetězce. Dotaz v MySQL: SELECT MID(pole1,3,1) AS jeden_znak,MID(pole1,3) AS do_konce FROM Tabulka

Obdobou funkce MID v MySQL je funkce SUBSTR (Oracle a SQLite). Fungují zcela stejně jako funkce MID v MySQL.

Rozlišení malých a velkých písmen Řada databázových systémů nerozlišuje při filtraci malá a velká písmena. Příkladem je jednoduchá tabulka, kde je hlavní město ČR zapsáno několika různými způsoby: pole Praha praha PRAHA prAHA

Pokud použijete dotaz SELECT pole FROM Tabulka WHERE pole=’Praha’

zobrazí se všechny řádky z tabulky. Obdobná situace nastane také při použití operátoru LIKE. 9 V MySQL je také funkce SUBSTRING, která funguje stejně jako funkce MID. 98  SQL – ­podrobný průvodce uživatele

Ukázka elektronické knihy, UID: KOS257951


Někdy je však třeba malá a velká písmena rozlišit. Obecné řešení představuje obtížný problém; pokud postačí, aby se rozlišilo první písmeno v textovém řetězci, můžete výhodně použít standardní funkci ASCII. Parametrem funkce je textová hodnota, výsledkem je celé číslo, odpovídající postavení prvního znaku v řetězci ve znakové sadě. Tato funkce malá a velká písmena rozlišuje, protože odpovídající čísla pro malé a velké písmeno se liší. Pokud tedy chcete z uvedené tabulky zobrazit pouze řádky s velkým písmenem „P“ na začátku, doplníte filtr o podmínku, že se musí rovnat číselné kódy prvního znaku ve sloupci: SELECT pole FROM Tabulka WHERE pole=’Praha’AND ASCII(pole)=ASCII(‘P’)

Tento dotaz již rozliší malé a velké písmeno na začátku textu: pole Praha PRAHA

7.6  Ostatní textové funkce V SQL Serveru můžete použít ještě tyto funkce pro práci s textem: ◾◾ LEN – zjistí délku (počet znaků) textového řetězce. Do délky se zahrnují počáteční mezery, koncové mezery nikoliv. ◾◾ REPLACE – nahrazení části textu jiným řetězcem. Parametry: textové pole, text, který se hledá, čím se hledaný text nahradí. Pokud se hledaný znak nebo řetězec vyskytuje v textovém poli vícekrát, nahradí se všechny jeho výskyty. ◾◾ UPPER, LOWER – převod textu na velká nebo malá písmena. ◾◾ PATINDEX – hledání polohy znaku nebo řetězce. Funkce má dva parametry: prvním je vzorek hledaného textu s maskou, tedy s procenty zleva i zprava, druhý parametr je text, kde se hledání provádí. Výsledkem funkce je celé číslo, což je poloha prvního znaku vzorku textu. Při hledání se nerozlišují malá a velká písmena. Jestliže se hledaný vzorek textu nenajde, funkce vrátí nulu. ◾◾ STUFF – nahrazuje část textu jiným textovým řetězcem. Parametry: upravovaná textová hodnota, pozice, odkud se náhrada provádí, počet nahrazených znaků a řetězec, kterým se náhrada provádí. Pokud je počet nahrazovaných znaků menší, než délka řetězce, upravovaný text se prodlouží, v opačném případě se zkrátí. Počet nahrazovaných znaků může být i nula, pak se provede vložení zadaného řetězce. ◾◾ REVERSE – otáčí text. Výraz REVERSE(‘Velkopopovický Kozel‘) vrátí text „lezoK ýkcivopopokleV“. V systému MySQL jsou tyto funkce: ◾◾ LENGTH – délka textového řetězce. ◾◾ UPPER, LOWER – převod textu na velká nebo malá písmena. ◾◾ LOCATE (hledaný text, text kde se hledá, od kterého znaku se hledá) – hledání zadaného znaku nebo několika znaků v textovém řetězci. Funkce vrátí polohu prvního výskytu hledaného znaku. Pokud se hledaný text nenajde, funkce vrátí nulu. Hledaný text se zadává v apostrofech a bez masky.

Využití standardních funkcí 99

Ukázka elektronické knihy, UID: KOS257951


◾◾ INSTR (text kde se hledá, hledaný text) – obdoba funkce LOCATE, hledání probíhá vždy od začátku. Pokud se hledaný text nenajde, funkce vrátí nulu. Hledaný text se zadává v apostrofech a bez masky. ◾◾ REPLACE (text kde se provádí náhrada, text který se hledá, text kterým se provádí náhrada) – náhrada jednoho textu druhým. Hledaný a nahrazovaný text může mít jeden nebo více znaků. Pokud se hledaný text vyskytuje vícekrát, nahradí se všechny výskyty. ◾◾ INSERT (text, pozice, délka, vkládaný text) – vloží zadaný text do textového řetězce na zadanou pozici. Vkládaný text nahradí počet znaků podle zadané délky; délka vkládaného řetězce a počet nahrazovaných znaků se mohou lišit. Pokud je zadaná délka nula, provede se jen vložení a z původního textu se nic nenahradí. Funkce funguje stejně, jako funkce STUFF v SQL Serveru. ◾◾ REVERSE – otočení textu. Příklady: „Zobraz řádky z tabulky výrobků, kde je název výrobku delší než 15 znaků“: SELECT * FROM Vyrobky WHERE LEN(nazev)>15

V MySQL: SELECT * FROM Vyrobky WHERE LENGTH(nazev)>15

„Převeď zkratky měn na velká písmena“: SELECT UPPER(mena) AS mena_velka FROM Tabulka

„Ve sloupci s kódem akce nahraď lomítko pomlčkou“: SELECT REPLACE(kod_akce,’/’,’-’) AS kod_jinak FROM Tabulka

„Do textů ve sloupci s kódem akce vlož na pátou pozici písmena cz“: SELECT STUFF(kod_akce,5,0,’cz’) AS vlozeno FROM Tabulka

V MySQL: SELECT INSERT(kod_akce,5,0,’cz’) AS vlozeno FROM Tabulka

„Z kódu akce vyjmi první část textu až k pomlčce.“ Polohu pomlčky, zjištěnou funkcí PATINDEX, musíte zmenšit o jedničku, aby se do vyjímaného textu nezahrnula také pomlčka: SELECT LEFT(kod_akce,PATINDEX(‘%-%’,kod_akce)-1) AS cast_kodu FROM Tabulka

V MySQL: SELECT LEFT(kod_akce,INSTR(‘-’,kod_akce)-1) AS cast_kodu FROM Tabulka

100  SQL – ­podrobný průvodce uživatele

Ukázka elektronické knihy, UID: KOS257951


Turn static files into dynamic content formats.

Create a flipbook
SQL (Ukázka, strana 99) by Kosmas-CZ - Issuu