Kodulehed
[383] - Andmebaasid II (ITI0207) (sügis 2022)
Esiletöstetud Kiirvalik
Lisainfo Kõige olulisemate tegevuste kiirvalik. Failide saatmiseks valige Vastamine alt sobiv ülesanne.
Üldist
Materjalid
LisainfoMaterjalide kataloogid.
Värvilised mummud tähistavad hinnangulist kataloogide lugemise vajadust. Roheline - suurim, kollane - keskmine, punane või mummuta - väikseim
Isiklik
Lisainfo Info ainult Sulle - teised kasutajad seda ei näe
Abi
Lisainfo Võimalus küsida õppejõult abi (nagu foorum, kus saab küsida küsimusi ja kommenteerida vastuseid)
Mitmesugust
Abi / Kasutajatugi / PostgreSQL

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

Erki Eessaar (14.10.2022 10:34):
Miks on PostgreSQLis kasulik kasutada DATE ja TIMESTAMP tüüpidesse kuuluvat spetsiaalväärtust 'infinity'?
Vastus (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 vastust:

Keskmine hinne : Pole veel hinnanguid!