Mysql
 sql >> Database >  >> RDS >> Mysql

WEEK() Esempi – MySQL

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 |
+--------+--------+--------+--------+--------+--------+--------+--------+