/* \i 'H:\\Linguaggi_1\\PostgreSQL\\Prove2_DominiVari.sql' */


/* INSERISCE VALORI APPARTENENTI AI VARI DOMINI NON NUMERICI. */

DROP DATABASE IF EXISTS prove2; /* Cancellazione della versione precedente del db */

CREATE DATABASE prove2; /* Creazione del db */

/* Connessione al db */
\c prove2

/* Creazione di tabella */
CREATE TABLE T (
    NomeT2 VARCHAR(20) PRIMARY KEY,
    Inte INTEGER NOT NULL CHECK (Inte <> 10),
    Giornata DATE NOT NULL,
    Istante TIME NOT NULL,
    GioIsta TIMESTAMP NOT NULL,
    Durata INTERVAL DAY TO MINUTE NOT NULL, /* Gestisce l'intervallo composto da: giorni, mesi, minuti. */
    Boo BOOLEAN NOT NULL
);

INSERT INTO T VALUES ('A', 10, '2023-12-03', '22:23:24', '2011-11-11 12:13:14', '40 2:3', true);
/* '40 2:3' indica: 40 giorni, 2 ore, 3 minuti. */
/* ERRORE: Il valore 10 non e` consentito all'attributo $Inte. */

INSERT INTO T VALUES ('A', 7, '2023-11-30', '23:33:43', '2021-11-11 12:13:14', '40 2:3', false);

INSERT INTO T VALUES ('B', 7, '2023-12-01', '23:24:25', '2022-11-11 12:13:14', '50 2:3', false);

INSERT INTO T VALUES ('C', 9, '2023-12-03', '22:23:24', '2023-11-11 12:13:15', '60 3:6', true);

INSERT INTO T VALUES ('D', 9, '2023-12-03', '22:23:24', '2023-11-11 12:13:15', '60 3:6', true);

INSERT INTO T VALUES ('E', 9, '2023-12-03', '22:23:24', '2023-11-11 12:13:15', '60 3:6', true);

SELECT * FROM T;

SELECT
  (MAX(Giornata) - MIN(Giornata)) AS DiffeGiorni, (MAX(Istante) - MIN(Istante)) AS DiffeIsta,
  (MAX(GioIsta) - MIN(GioIsta)) AS DiffeGioIsta, (MAX(Durata) - MIN(Durata)) AS DiffeDurata,
  (MAX(Giornata) + MIN(Durata)) AS FineGiornata
FROM T;

SELECT EXTRACT(MONTH FROM (MAX(Giornata))) AS Mese
FROM T;
/* Stampa
 diffegiorni | diffeista |   diffegioista    |   diffedurata    |    finegiornata
-------------+-----------+-------------------+------------------+---------------------
           3 | 01:10:19  | 730 days 00:00:01 | 20 days 01:03:00 | 2024-01-12 02:03:00
(1 riga)
*/

