In MariaDB, YEARWEEK()
è una funzione di data e ora incorporata che restituisce l'anno e la settimana per una determinata data.
Accetta due argomenti; la data da cui vuoi estrarre l'anno e la settimana e un argomento di modalità facoltativo per specificare la modalità da utilizzare nel risultato.
Restituisce la settimana come numero nell'intervallo 0
a 53
o 1
a 53
, a seconda della modalità utilizzata. Inoltre, l'anno nel risultato potrebbe essere diverso dall'anno nell'argomento data per la prima e l'ultima settimana dell'anno.
Sintassi
La sintassi è questa:
YEARWEEK(date), YEARWEEK(date,mode)
Che potrebbe anche essere espresso così:
YEARWEEK(date[,mode])
Dove date
è l'espressione di data da cui ottenere l'anno e la settimana e mode
è un argomento facoltativo che consente di specificare una modalità da utilizzare.
Modalità
La mode
opzionale argomento determina se la settimana inizia domenica o lunedì e se il valore restituito deve essere compreso nell'intervallo da 0
a 53
o da 1
a 53
.
L'argomento modalità può essere uno dei seguenti:
Modalità | 1° giorno della settimana | Gamma | La settimana 1 è la prima settimana con... |
---|---|---|---|
0 | Domenica | 0-53 | una domenica di quest'anno |
1 | lunedì | 0-53 | più di 3 giorni quest'anno |
2 | Domenica | 1-53 | una domenica di quest'anno |
3 | lunedì | 1-53 | più di 3 giorni quest'anno (secondo ISO 8601:1988) |
4 | Domenica | 0-53 | più di 3 giorni quest'anno |
5 | lunedì | 0-53 | un lunedì di quest'anno |
6 | Domenica | 1-53 | più di 3 giorni quest'anno |
7 | lunedì | 1-53 | un lunedì di quest'anno |
Se l'argomento mode viene omesso, il valore del default_week_format
viene utilizzata la variabile di sistema.
Controlliamo il valore del mio default_week_format
variabile di sistema:
SELECT @@default_week_format;
Risultato:
+-----------------------+ | @@default_week_format | +-----------------------+ | 0 | +-----------------------+
Ora, quando eseguo YEARWEEK()
senza specificare una modalità, utilizzerà la modalità 0
.
Esempio
Ecco un esempio di chiamata a YEARWEEK()
senza specificare la modalità:
SELECT YEARWEEK('2030-01-01');
Risultato:
+------------------------+ | YEARWEEK('2030-01-01') | +------------------------+ | 202952 | +------------------------+
In questo caso l'anno e la settimana risultanti sono dell'anno precedente.
Specifica una modalità
Ecco un esempio per specificare la modalità:
SELECT YEARWEEK('2030-01-01', 1);
Risultato:
+---------------------------+ | YEARWEEK('2030-01-01', 1) | +---------------------------+ | 203001 | +---------------------------+
Questa volta il risultato è diverso.
Esaminiamo tutte le modalità per la stessa data:
SELECT
YEARWEEK('2030-01-01', 0),
YEARWEEK('2030-01-01', 1),
YEARWEEK('2030-01-01', 2),
YEARWEEK('2030-01-01', 3),
YEARWEEK('2030-01-01', 4),
YEARWEEK('2030-01-01', 5),
YEARWEEK('2030-01-01', 6),
YEARWEEK('2030-01-01', 7);
Risultato (usando l'output verticale):
YEARWEEK('2030-01-01', 0): 202952 YEARWEEK('2030-01-01', 1): 203001 YEARWEEK('2030-01-01', 2): 202952 YEARWEEK('2030-01-01', 3): 203001 YEARWEEK('2030-01-01', 4): 203001 YEARWEEK('2030-01-01', 5): 202953 YEARWEEK('2030-01-01', 6): 203001 YEARWEEK('2030-01-01', 7): 202953
Valori di data e ora
Il YEARWEEK()
la funzione funziona anche con i valori datetime:
SELECT YEARWEEK('2030-08-01 10:30:45');
Risultato:
+---------------------------------+ | YEARWEEK('2030-08-01 10:30:45') | +---------------------------------+ | 203030 | +---------------------------------+
Date numeriche
È anche possibile trasmettere le date come numero, purché abbia senso come data.
Esempio
SELECT YEARWEEK(20301125);
Risultato:
+--------------------+ | YEARWEEK(20301125) | +--------------------+ | 203047 | +--------------------+
O anche il seguente (che utilizza un anno a due cifre):
SELECT YEARWEEK(301125);
Risultato:
+------------------+ | YEARWEEK(301125) | +------------------+ | 203047 | +------------------+
Ma deve avere un senso come appuntamento. Ecco cosa succede se aumento la parte del giorno a un giorno non valido:
SELECT YEARWEEK(20301135);
Risultato:
+--------------------+ | YEARWEEK(20301135) | +--------------------+ | NULL | +--------------------+ 1 row in set, 1 warning (0.000 sec)
Ha restituito null
con un avvertimento.
Diamo un'occhiata all'avviso:
SHOW WARNINGS;
Risultato:
+---------+------+--------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------+ | Warning | 1292 | Incorrect datetime value: '20301135' | +---------+------+--------------------------------------+
Altri delimitatori
È possibile utilizzare altri delimitatori per la data. MariaDB è abbastanza clemente quando si tratta di delimitatori sulle date. Ecco alcuni validi esempi:
SELECT
YEARWEEK('2030/06/25'),
YEARWEEK('2030,06,25'),
YEARWEEK('2030:06:25'),
YEARWEEK('2030;06!25');
Risultato (usando l'output verticale):
YEARWEEK('2030/06/25'): 203025 YEARWEEK('2030,06,25'): 203025 YEARWEEK('2030:06:25'): 203025 YEARWEEK('2030;06!25'): 203025
Data attuale
Possiamo passare NOW()
come argomento datetime per utilizzare la data corrente:
SELECT
NOW(),
YEARWEEK(NOW());
Risultato:
+---------------------+-----------------+ | NOW() | YEARWEEK(NOW()) | +---------------------+-----------------+ | 2021-05-17 09:08:23 | 202120 | +---------------------+-----------------+
Argomenti non validi
Quando viene passato un argomento non valido, YEARWEEK()
restituisce null
:
SELECT YEARWEEK('2030-65-78');
Risultato:
+------------------------+ | YEARWEEK('2030-65-78') | +------------------------+ | NULL | +------------------------+ 1 row in set, 1 warning (0.000 sec)
Mostriamo l'avviso:
SHOW WARNINGS;
Risultato:
+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '2030-65-78' | +---------+------+----------------------------------------+
Argomento mancante
Chiamando YEARWEEK()
con il numero errato di argomenti, o senza passare alcun argomento, si verifica un errore:
SELECT YEARWEEK();
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'
E un altro esempio:
SELECT YEARWEEK('2030-12-10', 1, 2);
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'