Küsimus
Vastus (05.01.2025 11:44):
Oletame, et andmebaasis on tabel, kuhu on lisatud kaks rida andmeid. Ühel isikul perenimi puudub (on NULL).CREATE TABLE Isik(isik_id INTEGER,
eesnimi VARCHAR(50) NOT NULL,
perenimi VARCHAR(50),
CONSTRAINT pk_isik PRIMARY KEY (isik_id));
INSERT INTO Isik (isik_id, eesnimi) VALUES (1,'Mati');
INSERT INTO Isik (isik_id, eesnimi, perenimi) VALUES (2,'Kati','Karu');
Ülesanne: Leia kõik isikud. Väljasta iga isiku kohta isik_id ning ees- ja perenimi ühe stringina. Nime komponentide vahel peab olema tühik.
PostgreSQLSELECT isik_id, eesnimi || ' ' || perenimi AS nimi
FROM Isik;
Isikul, kelle perenimi on NULL, on nime väljas samuti NULL, sest NULL || 'tekst'=>NULL
Kuidas saada tulemus, kus puuduva perenimega isikul on nime väljas eesnimi?
Lahendus 1: Funktsioon Coalesce tagastab vasakult lugedes esimese argumendi, mis pole NULL. Selle abil asendatakse NULL tühja stringiga. Funktsiooni Trim abil eemaldatakse stringi lõpust tühik.SELECT isik_id, Trim(eesnimi || ' ' || Coalesce(perenimi,'')) AS nimi
FROM Isik;
Lahendus 2: SELECT isik_id, Trim(Concat(eesnimi,' ',perenimi)) AS nimi
FROM Isik;
Lahendus 3: Trim funktsiooni tühiku eemaldamiseks eesnime järelt ei ole vaja.SELECT isik_id, Concat_ws(' ', eesnimi, perenimi) AS nimi
FROM Isik;
Lahendus 4:SELECT isik_id, Trim(Format('%1$s %2$s', eesnimi, perenimi)) AS nimi
FROM Isik;
MS AccessSELECT isik_id, Trim(eesnimi & ' ' & perenimi) AS nimi
FROM Isik;
MS Accessis on kaks eraldi stringide konkatenatsiooni operaatorit, mille korral on erinevus tulemuses, kui argument on NULL.
NULL & 'tekst'=>'tekst'
NULL+tekst=>'tekst'
LibreOffice Base (kasutab HSQLDB)SELECT ISIK_ID, Trim(BOTH FROM (EESNIMI || ' ' || Coalesce(PERENIMI,''))) AS NIMI
FROM ISIK;
Sarnaselt PostgreSQLile NULL || 'tekst'=>NULL. Seega kasutatakse Coalesce funktsiooni, et asendada NULL tühja stringiga.