In MySQL, puoi usare WEEK()
funzione per ottenere il numero della settimana per una data data. Per "numero della settimana" intendo la settimana dell'anno.
Per utilizzare la funzione, è sufficiente fornire la data come argomento e verrà restituito il numero della settimana.
Hai anche la possibilità di specificare se iniziare la settimana di domenica o di lunedì e se la settimana deve essere compresa tra 0 e 53 o tra 1 e 53.
Sintassi
La sintassi è questa:
WEEK(date[,mode])
Dove:
date
è la data da cui vuoi restituire il numero della settimana.mode
è un numero che specifica se la settimana deve iniziare domenica o lunedì e se la settimana deve essere compresa tra 0 e 53 o tra 1 e 53. Vedere la tabella seguente per i possibili valori di modalità.
Esempio 1 – Utilizzo di base
Ecco un esempio da dimostrare.
SELECT WEEK('2021-01-25') As 'Week Number';
Risultato:
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
Ecco un esempio con una data prossima alla fine dell'anno.
SELECT WEEK('2021-12-25') As 'Week Number';
Risultato:
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
Esempio 2:specificare una modalità
Se non specifichi un secondo argomento, WEEK()
la funzione utilizza la modalità specificata da default_week_format
variabile di sistema. Il valore predefinito di questa variabile è 0
.
Tuttavia, hai anche la possibilità di fornire un secondo argomento per specificare quale modalità utilizzare. Esempio:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
Risultato:
+--------+ | Mode 7 | +--------+ | 41 | +--------+
I possibili valori di modalità sono i seguenti.
Modalità | Primo giorno della settimana | Gamma | La settimana 1 è la prima settimana... |
---|---|---|---|
0 | Domenica | 0-53 | con una domenica di quest'anno |
1 | lunedì | 0-53 | con 4 o più giorni quest'anno |
2 | Domenica | 1-53 | con una domenica di quest'anno |
3 | lunedì | 1-53 | con 4 o più giorni quest'anno |
4 | Domenica | 0-53 | con 4 o più giorni quest'anno |
5 | lunedì | 0-53 | con un lunedì di quest'anno |
6 | Domenica | 1-53 | con 4 o più giorni quest'anno |
7 | lunedì | 1-53 | con un lunedì di quest'anno |
Per i valori di modalità in cui la settimana 1 è la prima settimana "con 4 o più giorni quest'anno", le settimane sono numerate secondo ISO 8601:1988:
- Se la settimana contenente il 1° gennaio ha 4 o più giorni nel nuovo anno, è la settimana 1.
- In caso contrario, è l'ultima settimana dell'anno precedente e la settimana successiva è la settimana 1.
Esempio 3 – Confronto di modalità
Ecco un rapido confronto di come ottenere risultati diversi a seconda della modalità utilizzata.
I tre esempi seguenti utilizzano lo stesso codice, ma con tre date diverse. Queste date sono consecutive:si verificano il 5, 6 e 7 gennaio. Come puoi vedere, i risultati possono essere molto diversi a seconda della data esatta e della modalità utilizzata.
Data 1
SET @date = '2019-01-05'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Risultato:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Data 2
SET @date = '2019-01-06'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Risultato:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 1 | 1 | 1 | 2 | 0 | 2 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Data 3
SET @date = '2019-01-07'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Risultato:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | +--------+--------+--------+--------+--------+--------+--------+--------+