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 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 Access
SELECT 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.
Hinda postitust:
Keskmine hinne : Pole veel hinnanguid!