PostgreSQLis NULL || tekstiline väärtus = NULL. Kuidas luua PostgreSQLis sarnane operaator MS Accessi stringide konkatenatsiooni operaatorile &, mille korral NULL & tekstiline väärtus = tekstiline väärtus?

Postitas Erki Eessaar
Järgneva koodi võite käivitada oma andmebaasis ja see loob operaatori & mis käitub nii:
NULL & tekstiline väärus = tekstiline väärtus
NULL & NULL = tühi string

CREATE FUNCTION textcat_coalesce(text, text) RETURNS text AS $$
SELECT coalesce($1,'') || coalesce($2,'');
$$ LANGUAGE sql IMMUTABLE LEAKPROOF;

COMMENT ON FUNCTION textcat_coalesce(text, text) IS
'Stringide konkatenatsiooni operaatorit & realiseeriv funktsioon. Tagab, et operatsiooni tulemus pole NULL.';

CREATE OPERATOR & (
LEFTARG = text,
RIGHTARG = text,
PROCEDURE = textcat_coalesce
);

SELECT NULL || 'katsetus' AS tulemus;


Tulemus:NULL

SELECT NULL & 'katsetus' AS tulemus;


Tulemus: katsetus

NB! Alternatiiv sellise operaatori kasutamisele oleks tarvitada koos PostgreSQLi konkateneerimise operaatoriga (||) coalesce funktsiooni. coalesce funktsiooni pool pöördumisel võib ette anda mitu samatüübilist argumenti. Funktsioon tagastab vasakult lugedes esimese argumendi, mis ei ole NULL (või kui kõik argumendid on NULLid, siis tagastab NULLi). Seda funktsiooni saab kasutada NULLi asendamiseks konkreetse väärtusega.

SELECT coalesce(NULL,'') || 'katsetus' AS tulemus;
Tulemus: katsetus (sest kokku ühendatakse kaks väärtust - 'katsetus' ja '')

Samuti võib kasutada concat_ws funktsiooni.

SELECT concat_ws(' ', 'katsetus', NULL) AS tulemus;
Tulemus: katsetus (sest funktsioon ignoreerib NULL argumente)

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!