Části textu
Často potřebujete jen část textu: rok z data, první písmena jména, doménu z e-mailu. SUBSTR(text, start, delka) (z anglického „substring“, podřetězec) vyřízne delka znaků, počínaje znakem na pozici start. Pozice se počítají od 1:
SELECT SUBSTR('Dragon Forge', 1, 6) AS prvni_slovo, SUBSTR('Dragon Forge', 8) AS zbytek;| prvni_slovo | zbytek |
|---|---|
| Dragon | Forge |
Bez třetího argumentu pokračuje SUBSTR až do konce textu. A protože data jsou texty, je SUBSTR(vydano, 1, 4) rok, kdy hra vyšla, a SUBSTR(vydano, 6, 2) měsíc.
INSTR(text, cast) najde, kde v textu nějaká část je: vrátí pozici, na které začíná, nebo 0, když ji text neobsahuje. INSTR('eva.novotna@mail.cz', '@') je 12. Spolu se SUBSTR tak můžete text rozříznout u nějakého znaku, ať je kdekoli. Uživatelské jméno v e-mailu je všechno před zavináčem:
SELECT email,
INSTR(email, '@') AS pozice_zavinace,
SUBSTR(email, 1, INSTR(email, '@') - 1) AS uzivatel
FROM zakaznici
ORDER BY id
LIMIT 3;| pozice_zavinace | uzivatel | |
|---|---|---|
| eva.novotna@mail.cz | 12 | eva.novotna |
| jakub.d@mail.cz | 8 | jakub.d |
| tereza@svobodovi.cz | 7 | tereza |
Poslední sloupec čtěte zevnitř ven: INSTR najde zavináč, - 1 se posune o znak zpátky a SUBSTR vezme tolik znaků od začátku.
REPLACE(text, co, cim) nahradí každý výskyt jednoho textu jiným. Pro hashtagy obchod z názvů her odstraní mezery tak, že je nahradí prázdným textem:
SELECT nazev, '#' || REPLACE(nazev, ' ', '') AS hashtag
FROM hry
LIMIT 3;| nazev | hashtag |
|---|---|
| Dragon Forge | #DragonForge |
| Pixel Racer | #PixelRacer |
| Moon Farm | #MoonFarm |
TRIM(text) odstraní mezery na začátku a na konci textu; LTRIM a RTRIM jen vlevo, nebo jen vpravo. Data obchodu jsou uklizená, ale texty, které lidé píšou do formulářů, často ne, a 'Moon Farm ' se nerovná 'Moon Farm'. Aby byly mezery vidět, dejte kolem textu závorky:
SELECT '[' || ' Moon Farm ' || ']' AS s_mezerami,
'[' || TRIM(' Moon Farm ') || ']' AS bez_mezer;| s_mezerami | bez_mezer |
|---|---|
| [ Moon Farm ] | [Moon Farm] |
S druhým argumentem odstraní TRIM místo mezer jiné znaky: TRIM('...Páni!!', '.!') je Páni.
Typická chyba: počítání od 0, jako v mnoha programovacích jazycích. SUBSTR(vydano, 0, 4) dá jen tři znaky, třeba 202, protože pozice 0 je ještě před začátkem textu. V SQL je první znak na pozici 1.
Jak psát:
Pokyny
Každá hra dostane kód pro sklad: první tři písmena názvu velkými písmeny, pomlčku a své ID, třeba DRA-1. Ukažte kód jako kod a název, seřazené podle ID:
| kod | nazev |
|---|---|
| DRA-1 | Dragon Forge |
| PIX-2 | Pixel Racer |
| MOO-3 | Moon Farm |
| … | … |
Pod tím ukažte jméno každého zákazníka a doménu jeho e-mailu, tedy všechno za zavináčem, jako domena. Zákazníky seřaďte podle ID:
| jmeno | domena |
|---|---|
| Eva Novotná | mail.cz |
| Jakub Dvořák | mail.cz |
| Tereza Svobodová | svobodovi.cz |
| … | … |
A pro adresy stránek obchodu ukažte název každé hry a jeho podobu do adresy jako adresa: název malými písmeny, s pomlčkami místo mezer, třeba dragon-forge. Hry seřaďte podle názvu:
| nazev | adresa |
|---|---|
| Bakery Story | bakery-story |
| Castle Siege | castle-siege |
| Cube Logic | cube-logic |
| … | … |
Začněte programovat zdarma
4/10