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'