Direct naar de hoofdinhoud
Module 6 · Les 1 van 421/57 in de cursus~12 min
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

SQL
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:

SQL
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:

SQL
WHERE titolo LIKE '%50\%%' ESCAPE '\';   -- contiene "50%"

Functies combineren

Functies componeren zoals in elke taal:

SQL
-- 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

Oefening#sql.m6.l1.e1
Pogingen: 0Laden…

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.

Editor laden…
Toon hint

LOWER voor de eerste kolom, || aaneenschakelen met een spatie ertussen.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#sql.m6.l1.e2
Pogingen: 0Laden…

Vind alle producten waarbij het woord ‘laptop’ (in ieder geval) in de naam voorkomt. Toon alleen de naamkolom. Bestel op naam.

Editor laden…
Toon hint

ILIKE is hoofdlettergevoelig. Gebruik '%laptop%' om 'laptop' in elke positie te matchen.

Oplossing beschikbaar na 3 pogingen