Modulelessen (1/4)
String-functies
PostgreSQL heeft tientallen functies voor het manipuleren van tekenreeksen. In deze les
we kijken naar de meest voorkomende in het echte werk: normaliseren (LOWER/UPPER),
meten (LENGTH), componeren (|| / CONCAT), extraheren (SUBSTRING),
opschonen (TRIM), vervangen (REPLACE) en zoeken naar patronen
(LIKE / ILIKE).
De functies die we zullen gebruiken
LOWER('Alice') -- 'alice'
UPPER('alice') -- 'ALICE'
LENGTH('alice') -- 5
'a' || 'b' -- 'ab' (concatenazione)
CONCAT('a', 'b', 'c') -- 'abc' (versione "funzione")
SUBSTRING('hello' FROM 2 FOR 3) -- 'ell'
TRIM(' alice ') -- 'alice'
REPLACE('foo bar', 'bar','x') -- 'foo x'|| is de standaard SQL-operator voor het aaneenschakelen van tekenreeksen; CONCAT is
toleranter (het negeert NULLs, terwijl || ze propageert:
'a' || NULL → NULL).
LIKE en ILIKE: zoeken op patroon
LIKE zoekt naar een patroon: % = elke reeks, _ = één
karakter. Het is hoofdlettergevoelig. ILIKE is de PostgreSQL
hoofdletterongevoelig variant:
WHERE name LIKE '%Cuffie%' -- match esatto "Cuffie"
WHERE name ILIKE '%cuffie%' -- match anche "CUFFIE", "Cuffie", "cuffie"
WHERE email LIKE '%@example.com'
WHERE first_name LIKE 'A_____' -- inizia per A, lungo 6 (A + 5 caratteri)Om te zoeken naar een letterlijke % of _ binnen het patroon, gebruik je ESCAPE:
WHERE titolo LIKE '%50\%%' ESCAPE '\'; -- contiene "50%"Functies combineren
Functies componeren zoals in elke taal:
-- Email "normalizzata" e iniziali in maiuscolo:
SELECT LOWER(email) AS email_norm,
UPPER(SUBSTRING(first_name FROM 1 FOR 1)) || '.'
|| UPPER(SUBSTRING(last_name FROM 1 FOR 1)) || '.' AS iniziali
FROM customers
ORDER BY id;Probeer het
Geef voor elke klant de e-mail weer in kleine letters (kolom e-mail) en de volledige naam als 'voornaam achternaam' (kolom volledige_naam). Bestel op ID.
Toon hint
LOWER voor de eerste kolom, || aaneenschakelen met een spatie ertussen.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Vind alle producten waarbij het woord ‘laptop’ (in ieder geval) in de naam voorkomt. Toon alleen de naamkolom. Bestel op naam.
Toon hint
ILIKE is hoofdlettergevoelig. Gebruik '%laptop%' om 'laptop' in elke positie te matchen.
Oplossing beschikbaar na 3 pogingen