🧚 Ascolta! Beekeeper Studio è una GUI per database veloce, moderna e open source Scarica
2 luglio 2025 Di Matthew Rathbone

Per inserire una data in SQL, scrivila nell'istruzione INSERT come stringa 'YYYY-MM-DD', oppure usa una funzione come CURRENT_DATE per la data di oggi. Gli esempi funzionano in PostgreSQL, MySQL, SQLite e SQL Server.

Come inserire una data in SQL

Scrivi la data come stringa nel formato 'YYYY-MM-DD'. Se la colonna è di tipo data, il database converte la stringa in una data:

INSERT INTO table_name (date_column) VALUES ('YYYY-MM-DD');
INSERT INTO orders (order_id, customer, order_date)
VALUES (2, 'Tom', '2021-06-15');

Per una colonna TIMESTAMP o DATETIME, aggiungi l'ora dopo uno spazio, nel formato 24 ore:

INSERT INTO flights (flight_no, departs_at)
VALUES ('UA 940', '2026-11-02 17:45:00');
-- In SQL Server, make departs_at a DATETIME2: its TIMESTAMP type isn't a date

Per la data di oggi, metti CURRENT_DATE al posto della stringa, senza virgolette. CURRENT_TIMESTAMP restituisce data e ora:

INSERT INTO orders (order_id, customer, order_date)
VALUES (3, 'Priya', CURRENT_DATE);
-- In SQL Server, use CAST(GETDATE() AS DATE): it has no CURRENT_DATE

-- Output (the new row, run on 2026-10-13):
-- order_id | customer | order_date
-- ---------+----------+-----------
-- 3        | Priya    | 2026-10-13

Regole da conoscere

  • Usa sempre 'YYYY-MM-DD'. Gli altri formati dipendono dalle impostazioni del database. PostgreSQL e SQL Server leggono '06/15/2021' come mese/giorno/anno, mentre MySQL lo rifiuta:
INSERT INTO orders (order_id, customer, order_date) VALUES (4, 'Ana', '06/15/2021');
-- MySQL: ERROR 1292 (22007): Incorrect date value: '06/15/2021' for column 'order_date' at row 1
  • SQLite non controlla le date. Non ha un tipo data e salva qualsiasi testo gli passi. Le sue funzioni per le date non sanno leggere '06/15/2021' e trasformano '2021-02-30' in 2021-03-02.
  • Il TIMESTAMP di MySQL copre solo dal 1970 al 2038. Usa DATETIME per compleanni, date storiche e qualsiasi data molto lontana nel futuro:
-- MySQL
CREATE TABLE people (name VARCHAR(50), born_at TIMESTAMP);
INSERT INTO people (name, born_at) VALUES ('Ada Lovelace', '1815-12-10 00:00:00');
-- ERROR 1292 (22007): Incorrect datetime value: '1815-12-10 00:00:00' for column 'born_at' at row 1
  • “Adesso” è nel fuso orario del database (sempre UTC in SQLite). Se i tuoi utenti sono in più fusi orari, salva in UTC.

Sintassi alternativa

Incontrerai anche i nomi specifici di ogni database per oggi e adesso:

  • MySQL: CURDATE() e NOW(). Anche PostgreSQL ha NOW().
  • SQLite: date('now') e datetime('now').
  • SQL Server: CAST(GETDATE() AS DATE) e GETDATE(). Non ha CURRENT_DATE, quindi per la data di oggi serve il cast.

Quando serve inserire una data?

La maggior parte degli inserimenti di date rientra in uno di questi cinque casi, ognuno con il suo strumento.

Registrare una data che conosci già

Compleanni, scadenze e appuntamenti arrivano da una persona o da un modulo. Scrivili come stringhe 'YYYY-MM-DD'.

Registrare la data di oggi o l'ora attuale

Date degli ordini, date di registrazione e log di audit dovrebbero venire dall'orologio del database, non da un valore digitato da qualcuno. Usa CURRENT_DATE o CURRENT_TIMESTAMP (GETDATE() in SQL Server), oppure impostane uno come valore predefinito della colonna.

Salvare anche l'ora oltre alla data

Riunioni, voli e voci di log hanno bisogno anche dell'ora. Usa una colonna DATETIME o TIMESTAMP e scrivi 'YYYY-MM-DD HH:MM:SS'.

Calcolare una data a partire da un'altra

Scadenze, rinnovi e promemoria cadono a un certo intervallo da un'altra data. Lascia che sia il database a fare i calcoli: + INTERVAL in PostgreSQL e MySQL, DATEADD() in SQL Server e date() con un modificatore in SQLite.

Caricare date scritte in un altro formato

Fogli di calcolo ed export CSV contengono spesso date come 06/15/2021. Convertile durante l'inserimento: STR_TO_DATE() in MySQL, TO_DATE() in PostgreSQL e CONVERT() con un numero di stile in SQL Server. SQLite non sa interpretare altri formati, quindi riordina il testo con substr().

Esempi reali di inserimento di date

Aggiungere più date in un'unica istruzione

Un elenco di festività si inserisce con un solo INSERT e una riga di valori per ogni data:

INSERT INTO holidays (holiday_name, holiday_date)
VALUES
  ('Independence Day', '2026-07-04'),
  ('Thanksgiving', '2026-11-26'),
  ('Christmas Day', '2026-12-25');

Inserire la data di oggi con un valore predefinito

Assegna un valore predefinito alla colonna e ogni INSERT che la omette riceverà la data di oggi. MySQL richiede le parentesi attorno a CURRENT_DATE:

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_date DATE DEFAULT (CURRENT_DATE)  -- SQL Server: DEFAULT CAST(GETDATE() AS DATE)
);

INSERT INTO orders (order_id, customer_id) VALUES (1, 42);

-- Output (the new row, run on 2026-10-13):
-- order_id | customer_id | order_date
-- ---------+-------------+-----------
-- 1        | 42          | 2026-10-13

Salvare l'orario locale di una riunione in UTC

Qualcuno a New York prenota una riunione per le 9:30 ora locale. Convertila in UTC durante l'inserimento, così gli orari di tutti combaciano:

INSERT INTO meetings (title, starts_at_utc)
VALUES ('Design review', TIMESTAMP '2026-10-20 09:30:00' AT TIME ZONE 'America/New_York' AT TIME ZONE 'UTC');
-- MySQL (once its time zone tables are loaded):
--   CONVERT_TZ('2026-10-20 09:30:00', 'America/New_York', 'UTC')
-- SQL Server:
--   CAST('2026-10-20 09:30:00' AS DATETIME2) AT TIME ZONE 'Eastern Standard Time' AT TIME ZONE 'UTC'

-- Output (the new row):
-- title         | starts_at_utc
-- --------------+--------------------
-- Design review | 2026-10-20 13:30:00

SQLite non supporta i fusi orari per nome, quindi fai la conversione nella tua applicazione prima di inserire.

Impostare una data di rinnovo a un mese

Un abbonamento si rinnova un mese dopo l'inizio. Calcola la data di rinnovo direttamente nell'INSERT:

INSERT INTO subscriptions (customer, started_on, renews_on)
VALUES ('Tom', '2026-10-13', DATE '2026-10-13' + INTERVAL '1' MONTH);
-- SQL Server: DATEADD(month, 1, '2026-10-13')
-- SQLite:     date('2026-10-13', '+1 month')

-- Output (the new row):
-- customer | started_on | renews_on
-- ---------+------------+-----------
-- Tom      | 2026-10-13 | 2026-11-13

Attenzione alla fine del mese in SQLite. Dal 31 gennaio sconfina in marzo, mentre gli altri database si fermano al 28 febbraio:

SELECT date('2026-01-31', '+1 month');
-- Output: 2026-03-03

Importare date in formato giorno/mese/anno

Un fornitore invia fatture con date in stile britannico, 15/06/2021. Indica al database il formato durante l'inserimento:

INSERT INTO invoices (invoice_no, issued_on)
VALUES ('INV-1002', TO_DATE('15/06/2021', 'DD/MM/YYYY'));
-- MySQL:      STR_TO_DATE('15/06/2021', '%d/%m/%Y')
-- SQL Server: CONVERT(date, '15/06/2021', 103), where style 103 is dd/mm/yyyy
-- SQLite can't parse dates: rearrange the text with substr()

-- Output (the new row):
-- invoice_no | issued_on
-- -----------+-----------
-- INV-1002   | 2021-06-15

Approfondimenti sull'inserimento di date

Su questo blog:

Documentazione ufficiale:

Beekeeper Studio è una GUI per database gratuita & open source

Il miglior strumento per query & editor SQL che abbia mai usato. Offre tutto ciò che mi serve per gestire il mio database. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio è veloce, intuitivo e facile da usare. Beekeeper supporta tantissimi database e funziona alla grande su Windows, Mac e Linux.

La versione Linux di Beekeeper è completa al 100%, senza tagli e senza compromessi sulle funzionalità.

Cosa dicono gli utenti di Beekeeper Studio

★★★★★
"Beekeeper Studio ha sostituito completamente il mio vecchio flusso di lavoro SQL. È veloce, intuitivo e rende di nuovo piacevole lavorare con i database."
— Alex K., Database Developer
★★★★★
"Ho provato tante GUI per database, ma Beekeeper trova il perfetto equilibrio tra funzionalità e semplicità. Funziona e basta."
— Sarah M., Full Stack Engineer

Pronto a migliorare il tuo flusso di lavoro SQL?

download Scarica gratis