🧚 Ascolta! Beekeeper Studio è una GUI per database veloce, moderna e open source Scarica
14 gennaio 2026 Di Matthew Rathbone

Formattare una data significa trasformarla in testo con il layout che scegli, come 03/15/2026 o Thursday, January 15. Ogni database ha la sua funzione per farlo, e gli esempi coprono PostgreSQL, MySQL, SQLite e SQL Server.

Come formattare le date in SQL

Passa alla funzione una data e una stringa di formato. I codici nella stringa di formato rappresentano parti della data, e tutto il resto viene copiato così com'è. In SQLite la funzione è strftime(), e i suoi codici iniziano con %:

strftime(format, date)
SELECT strftime('%m/%d/%Y', '2026-03-15');
-- Output: 03/15/2026

SELECT strftime('%I:%M %p', '2026-03-15 14:30:00');
-- Output: 02:30 PM

Su una colonna, la stessa data può uscire in tutti i layout che ti servono:

-- Input: orders
-- order_id | order_date
-- ---------+--------------------
-- 1        | 2026-01-15 09:42:00
-- 2        | 2026-03-02 16:05:00

SELECT
  order_date,
  strftime('%Y-%m-%d', order_date) AS iso_date,
  strftime('%m/%d/%Y', order_date) AS us_date,
  strftime('%d/%m/%Y', order_date) AS european_date
FROM orders;

-- Output:
-- order_date          | iso_date   | us_date    | european_date
-- --------------------+------------+------------+--------------
-- 2026-01-15 09:42:00 | 2026-01-15 | 01/15/2026 | 15/01/2026
-- 2026-03-02 16:05:00 | 2026-03-02 | 03/02/2026 | 02/03/2026

Questi sono i codici che userai di più, con il risultato di ciascuno per 2026-03-15 14:30:45:

Codice Significato Esempio
%Y Anno a 4 cifre 2026
%m Mese (01-12) 03
%d Giorno del mese (01-31) 15
%H Ora, formato 24 ore (00-23) 14
%I Ora, formato 12 ore (01-12) 02
%p AM o PM PM
%M Minuto (00-59) 30
%S Secondo (00-59) 45
%w Giorno della settimana (0-6, la domenica è 0) 0

Regole da conoscere

  • SQLite non ha codici per i nomi dei giorni o dei mesi. Codici come %a e %B fanno restituire NULL a strftime(). Converti invece %w o %m in un nome con CASE (vedi la sezione sul giorno della settimana più sotto).

  • Il risultato è testo. Confrontare o ordinare date formattate significa confrontare stringhe, e l'ordine corrisponde a quello delle date solo se l'anno viene per primo:

-- Input: sales
-- id | sale_date  | amount
-- ---+------------+-------
-- 1  | 2025-11-20 | 89.0
-- 2  | 2026-01-08 | 120.0
-- 3  | 2026-03-04 | 64.5

-- Wrong: '11/2025' > '02/2026' is true, because '1' > '0'
SELECT * FROM sales
WHERE strftime('%m/%Y', sale_date) > '02/2026';

-- Output:
-- id | sale_date  | amount
-- ---+------------+-------
-- 1  | 2025-11-20 | 89.0
-- 3  | 2026-03-04 | 64.5

-- Right: put the year first
SELECT * FROM sales
WHERE strftime('%Y-%m', sale_date) > '2026-02';

-- Output:
-- id | sale_date  | amount
-- ---+------------+-------
-- 3  | 2026-03-04 | 64.5
  • NULL in ingresso, NULL in uscita. strftime('%Y-%m-%d', NULL) restituisce NULL. Avvolgilo in COALESCE() per mostrare qualcos'altro, come 'No date'.
  • Filtra sulla data, formattala per mostrarla. WHERE order_date >= '2026-01-01' AND order_date < '2027-01-01' restituisce le stesse righe di WHERE strftime('%Y', order_date) = '2026', ma solo la prima può usare un indice su order_date.

Sintassi alternativa

PostgreSQL, MySQL e SQL Server hanno ciascuno la propria funzione e i propri codici:

-- PostgreSQL: TO_CHAR(value, pattern)
-- (FM stops it padding the day name to 9 characters)
SELECT TO_CHAR(TIMESTAMP '2026-01-15 09:42:00', 'FMDay, MM/DD/YYYY HH24:MI');
-- Output: Thursday, 01/15/2026 09:42

-- MySQL: DATE_FORMAT(value, pattern)
-- (%i is the minute; %M would be the month name)
SELECT DATE_FORMAT('2026-01-15 09:42:00', '%W, %m/%d/%Y %H:%i');
-- Output: Thursday, 01/15/2026 09:42

-- SQL Server: FORMAT(value, pattern)
-- (MM is the month, mm the minute)
SELECT FORMAT(CAST('2026-01-15 09:42:00' AS datetime2), 'dddd, MM/dd/yyyy HH:mm');
-- Output: Thursday, 01/15/2026 09:42

-- Older SQL Server code uses CONVERT with a style number (101 is mm/dd/yyyy)
SELECT CONVERT(VARCHAR(10), CAST('2026-01-15' AS date), 101);
-- Output: 01/15/2026

Quando conviene formattare le date?

Formatta una data quando deve essere mostrata o raggruppata come testo. La maggior parte dei casi rientra in uno di questi quattro.

Mostrare le date in un layout standard

Usa ISO 8601 (YYYY-MM-DD) per file e API, MM/DD/YYYY per chi legge negli USA e DD/MM/YYYY per gran parte dell'Europa. La formattazione elimina anche l'ora quando ti serve solo la data.

Raggruppare le righe per mese o anno

Estrai solo la parte della data che ti serve, come %Y per l'anno o %Y-%m per il mese, e raggruppa per il risultato per ottenere totali annuali o mensili.

Scrivere date leggibili

Combina codici e parole per etichette, promemoria ed email. “03/16 at 02:30 PM” si legge meglio di “2026-03-16 14:30:00”.

Lavorare con il giorno della settimana

%w restituisce il giorno della settimana come numero da 0 (domenica) a 6 (sabato). Filtra su questo valore per trovare i giorni feriali o i weekend, oppure convertilo in un nome con CASE.

Esempi reali di formattazione delle date

Aggiungere orari ISO 8601 a un export

Un'API vuole timestamp come 2026-03-15T08:05:12Z. Gli orari in audit_log sono salvati in UTC, quindi metti T e Z attorno ai codici (SQLite):

-- Input: audit_log
-- id | action | logged_at
-- ---+--------+--------------------
-- 1  | login  | 2026-03-15 08:05:12
-- 2  | export | 2026-03-15 14:30:45
-- 3  | logout | 2026-03-15 17:58:03

SELECT
  id,
  action,
  strftime('%Y-%m-%dT%H:%M:%SZ', logged_at) AS logged_at_iso
FROM audit_log;

-- Output:
-- id | action | logged_at_iso
-- ---+--------+---------------------
-- 1  | login  | 2026-03-15T08:05:12Z
-- 2  | export | 2026-03-15T14:30:45Z
-- 3  | logout | 2026-03-15T17:58:03Z

Contare le iscrizioni per mese

Raggruppa gli utenti per mese di iscrizione (PostgreSQL). YYYY-MM mantiene i mesi in ordine cronologico:

-- Input: users
-- id | name       | signup_date
-- ---+------------+------------
-- 1  | Ana Lima   | 2026-01-08
-- 2  | Ben Okafor | 2026-01-27
-- 3  | Chloe Park | 2026-02-14
-- 4  | Dev Mehta  | 2026-03-03
-- 5  | Elle Novak | 2026-03-30

SELECT
  TO_CHAR(signup_date, 'YYYY-MM') AS month,
  COUNT(*) AS signups
FROM users
GROUP BY TO_CHAR(signup_date, 'YYYY-MM')
ORDER BY month;

-- Output:
-- month   | signups
-- --------+--------
-- 2026-01 | 2
-- 2026-02 | 1
-- 2026-03 | 2

Scrivere una conferma di prenotazione

Scrivi per esteso giorno e mese in un messaggio di conferma (SQL Server):

-- Input: bookings
-- guest_name  | booking_time
-- ------------+--------------------
-- Priya Patel | 2026-03-16 14:30:00
-- Liam Murphy | 2026-03-18 09:15:00

SELECT
  guest_name,
  FORMAT(booking_time, 'dddd, MMMM d') + ' at ' + FORMAT(booking_time, 'h:mm tt') AS confirmation
FROM bookings;

-- Output:
-- guest_name  | confirmation
-- ------------+-------------------------------
-- Priya Patel | Monday, March 16 at 2:30 PM
-- Liam Murphy | Wednesday, March 18 at 9:15 AM

Trovare il giorno più affollato della settimana

Conta gli ordini per nome del giorno in cui sono stati effettuati (MySQL):

-- Input: orders
-- order_id | order_date
-- ---------+--------------------
-- 1        | 2026-03-07 10:12:00
-- 2        | 2026-03-09 16:40:00
-- 3        | 2026-03-14 11:05:00
-- 4        | 2026-03-16 09:20:00
-- 5        | 2026-03-21 13:45:00

SELECT
  DATE_FORMAT(order_date, '%W') AS weekday,
  COUNT(*) AS order_count
FROM orders
GROUP BY weekday
ORDER BY order_count DESC;

-- Output:
-- weekday  | order_count
-- ---------+------------
-- Saturday | 3
-- Monday   | 2

Approfondimenti sulla formattazione delle 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 workflow SQL. È veloce, intuitivo e rende di nuovo piacevole lavorare con i database."
— Alex K., Database Developer
★★★★★
"Ho provato molte GUI per database, ma Beekeeper trova l'equilibrio perfetto tra funzionalità e semplicità. Funziona e basta."
— Sarah M., Full Stack Engineer

Pronto a migliorare il tuo workflow SQL?

download Scarica gratis