Spojování textu

Někdy chcete mít několik hodnot v jednom textu: název hry s jejím žánrem, jméno zákazníka s jeho e-mailem. Operátor ||, dvě svislé čáry, spojuje texty dohromady:

SELECT nazev || ' (' || zanr || ')'
FROM hry;
nazev || ' (' || zanr || ')'
Dragon Forge (RPG)
Pixel Racer (Závodní)
Moon Farm (Simulace)
…

' (' a ')' jsou texty napsané přímo v dotazu. V SQL se text píše vždycky mezi apostrofy (jednoduché uvozovky): 'Ahoj', ' ('. Apostrofy nejsou součástí textu. Jen ukazují, kde text začíná a kde končí, a všechno mezi nimi zůstane přesně tak, jak je, i mezery a velká písmena. Bez apostrofů by SQLite slovo považovalo za název sloupce. Čísla se píšou bez apostrofů: 5, 0.8. Na české klávesnici napíšete apostrof pomocí Shift + ¨ a svislou čáru pomocí Alt Gr + W.

Typická chyba: název sloupce v apostrofech. 'mesto' není sloupec mesto, ale text „mesto“, takže SELECT jmeno, 'mesto' FROM zakaznici; ukáže v každém řádku slovo mesto. A dvojité uvozovky jsou pro názvy, jako alias "cena po slevě" v minulém cvičení, ne pro text. SQLite sice text ve dvojitých uvozovkách někdy promine, ale jen když žádný sloupec nemá stejný název: "mesto" je pořád sloupec. Jiné databáze ho nepromíjejí vůbec.

|| spojí i čísla, jako text: nazev || ' za ' || cena || ' Kč' dá Dragon Forge za 999 Kč. Pozor ale na výpočty: || má přednost před * a -, takže nazev || ' za ' || cena * 2 nejdřív spojí texty a pak celý text vynásobí dvěma, což nedává smysl (výsledek je 0). Výpočet dejte do závorek: nazev || ' za ' || (cena * 2).

Když je kterákoli ze spojovaných hodnot NULL, je celý výsledek NULL. Anna Kučerová nemá město, takže pro ni tento dotaz dá NULL, a ne „Anna Kučerová, “:

SELECT jmeno || ', ' || mesto AS zakaznik
FROM zakaznici;
zakaznik
Eva Novotná, Praha
Jakub Dvořák, Brno
Tereza Svobodová, Praha
Lukáš Procházka, Ostrava
NULL
…

Jak místo NULL dát jinou hodnotu, se naučíte ve 4. lekci. A jak vidíte, spojený sloupec obvykle dostane alias; samotný výpočet by byl dlouhý název. Ještě poznámka: || funguje v SQLite, PostgreSQL i Oraclu, kdežto MySQL a SQL Server spojují texty funkcí CONCAT().

Pokyny

Ukažte kontakty zákazníků ve tvaru, jaký používá e-mail: jeden sloupec s názvem kontakt, se jménem, mezerou a e-mailem ve špičatých závorkách, třeba Adéla Králová <adela.kralova@mail.cz>. Seřaďte je podle jména. Špičaté závorky napíšete na české klávesnici pomocí Alt Gr + čárka a Alt Gr + tečka. Výsledek začíná takto:

kontakt
Adéla Králová <adela.kralova@mail.cz>
Anna Kučerová <anna.kucerova@mail.cz>
Eva Novotná <eva.novotna@mail.cz>
…

Pod tím připravte texty na reklamní banner výprodeje, jako je Knight's Oath: nyní za 1499 Kč, s názvem hry a cenou o 100 Kč nižší. Ukažte je v jednom sloupci s názvem sleva, seřazené podle ceny od nejdražší:

sleva
Knight's Oath: nyní za 1499 Kč
Goal Rush: nyní za 1199 Kč
Ice Hockey Pro: nyní za 1099 Kč
…

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

11/12