Miks on PostgreSQLis kasulik kasutada DATE ja TIMESTAMP tüüpidesse kuuluvat spetsiaalväärtust 'infinity'?

Postitas Erki Eessaar 14.10.2022 10:43 (muudeti 14.10.2022 10:45)
PostgreSQLi DATE ja TIMESTAMP tüüpidesse kuuluvad spetsiaalväärtused 'infinity' (suurem kui kõik ülejäänud DATE/TIMESTAMP väärtused) ja '-infinity' (väiksem kui kõik ülejäänud DATE/TIMESTAMP väärtused).

Need lihtsustavad päringute tegemist.

Tabelis Kasutus_1 on kasutusel, mille lõpu aeg pole teada, lõpu aja väli tühi (seal väljas on NULL).

CREATE TABLE Kasutus_1 (kasutus_1_id SERIAL,
ruumi_nr INTEGER NOT NULL,
alguse_aeg TIMESTAMP NOT NULL,
lopu_aeg TIMESTAMP,
CONSTRAINT pk_kasutus_1 PRIMARY KEY (kasutus_1_id),
CONSTRAINT ak_kasutus_1 UNIQUE (ruumi_nr, alguse_aeg));

INSERT INTO Kasutus_1 (ruumi_nr, alguse_aeg) VALUES (1, '2022-10-04 12:00'),
(2, '2022-10-04 12:00');
INSERT INTO Kasutus_1 (ruumi_nr, alguse_aeg, lopu_aeg)
VALUES (1, '2021-11-04 12:00', '2021-11-04 14:00'),
(3, '2021-11-04 12:00', '2028-11-04 12:00');

Tabelis Kasutus_2 on kasutusel, mille lõpu aeg pole teada, lõpu aja väljas väärtus 'infinity'.

CREATE TABLE Kasutus_2 (kasutus_2_id SERIAL,
ruumi_nr INTEGER NOT NULL,
alguse_aeg TIMESTAMP NOT NULL,
lopu_aeg TIMESTAMP NOT NULL DEFAULT 'infinity',
CONSTRAINT pk_kasutus_2 PRIMARY KEY (kasutus_2_id),
CONSTRAINT ak_kasutus_2 UNIQUE (ruumi_nr, alguse_aeg));

INSERT INTO Kasutus_2 (ruumi_nr, alguse_aeg)
VALUES (1, '2022-10-04 12:00'),
(2, '2022-10-04 12:00');
INSERT INTO Kasutus_2 (ruumi_nr, alguse_aeg, lopu_aeg)
VALUES (1, '2021-11-04 12:00', '2021-11-04 14:00'),
(3, '2021-11-04 12:00', '2028-11-04 12:00');

Leia hetkel toimuvad kasutused.

Päring juhul kui lõpu aeg võib olla NULL.
SELECT *
FROM Kasutus_1
WHERE (LOCALTIMESTAMP BETWEEN alguse_aeg AND lopu_aeg)
OR (alguse_aeg<=LOCALTIMESTAMP AND lopu_aeg IS NULL);

Päring juhul kui teadmata lõpu aega tähistab spetsiaalväärtus 'infinity'.
SELECT *
FROM Kasutus_2
WHERE (LOCALTIMESTAMP BETWEEN alguse_aeg AND lopu_aeg);

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!