Oletame, et andmebaasis on tabel, kuhu on lisatud kaks rida andmeid. Ühel isikul perenimi puudub (on NULL).
Ü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.
PostgreSQL
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.
Lahendus 2:
Lahendus 3: Trim funktsiooni tühiku eemaldamiseks eesnime järelt ei ole vaja.
Lahendus 4:
MS Access
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)
Sarnaselt PostgreSQLile NULL || 'tekst'=>NULL. Seega kasutatakse Coalesce funktsiooni, et asendada NULL tühja stringiga.
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.
PostgreSQL
SELECT isik_id, eesnimi || ' ' || perenimi AS nimiFROM 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 nimiFROM Isik;Lahendus 2:
SELECT isik_id, Trim(Concat(eesnimi,' ',perenimi)) AS nimiFROM Isik;Lahendus 3: Trim funktsiooni tühiku eemaldamiseks eesnime järelt ei ole vaja.
SELECT isik_id, Concat_ws(' ', eesnimi, perenimi) AS nimiFROM Isik;Lahendus 4:
SELECT isik_id, Trim(Format('%1$s %2$s', eesnimi, perenimi)) AS nimiFROM Isik;MS Access
SELECT isik_id, Trim(eesnimi & ' ' & perenimi) AS nimiFROM 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 NIMIFROM ISIK;Sarnaselt PostgreSQLile NULL || 'tekst'=>NULL. Seega kasutatakse Coalesce funktsiooni, et asendada NULL tühja stringiga.
Kas postitus oli kasulik? Hinda seda!
Keskmine hinne: Pole veel hinnanguid!