In MariaDB, WEEK()
è una funzione di data e ora incorporata che restituisce la settimana da una determinata espressione di data.
Accetta due argomenti; la data da cui vuoi estrarre 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.
Sintassi
La sintassi è questa:
WEEK(date[,mode])
Dove date
è l'espressione di data da cui ottenere 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 WEEK()
senza specificare una modalità, utilizzerà la modalità 0
.
Esempio
Ecco un esempio di chiamata a WEEK()
senza specificare la modalità:
SELECT WEEK('2030-01-01');
Risultato:
+--------------------+ | WEEK('2030-01-01') | +--------------------+ | 0 | +--------------------+
Specifica una modalità
Ecco un esempio per specificare la modalità:
SELECT WEEK('2030-01-01', 1);
Risultato:
+-----------------------+ | WEEK('2030-01-01', 1) | +-----------------------+ | 1 | +-----------------------+
Questa volta, il risultato è 1
invece di 0
.
Esaminiamo tutte le modalità per la stessa data:
SELECT
WEEK('2030-01-01', 0),
WEEK('2030-01-01', 1),
WEEK('2030-01-01', 2),
WEEK('2030-01-01', 3),
WEEK('2030-01-01', 4),
WEEK('2030-01-01', 5),
WEEK('2030-01-01', 6),
WEEK('2030-01-01', 7);
Risultato (usando l'output verticale):
WEEK('2030-01-01', 0): 0 WEEK('2030-01-01', 1): 1 WEEK('2030-01-01', 2): 52 WEEK('2030-01-01', 3): 1 WEEK('2030-01-01', 4): 1 WEEK('2030-01-01', 5): 0 WEEK('2030-01-01', 6): 1 WEEK('2030-01-01', 7): 53
Valori di data e ora
La WEEK()
la funzione funziona anche con i valori datetime:
SELECT WEEK('2030-08-01 10:30:45');
Risultato:
+-----------------------------+ | WEEK('2030-08-01 10:30:45') | +-----------------------------+ | 30 | +-----------------------------+
Date numeriche
È anche possibile trasmettere le date come numero, purché abbia senso come data.
Esempio
SELECT WEEK(20301125);
Risultato:
+----------------+ | WEEK(20301125) | +----------------+ | 47 | +----------------+
O anche il seguente (che utilizza un anno a due cifre):
SELECT WEEK(301125);
Risultato:
+--------------+ | WEEK(301125) | +--------------+ | 47 | +--------------+
Ma deve avere un senso come appuntamento. Ecco cosa succede se aumento la parte del giorno a un giorno non valido:
SELECT WEEK(20301135);
Risultato:
+----------------+ | WEEK(20301135) | +----------------+ | NULL | +----------------+ 1 row in set, 1 warning (0.001 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
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25');
Risultato (usando l'output verticale):
WEEK('2030/06/25'): 25 WEEK('2030,06,25'): 25 WEEK('2030:06:25'): 25 WEEK('2030;06!25'): 25
Data attuale
Possiamo passare NOW()
come argomento datetime per utilizzare la data corrente:
SELECT
NOW(),
WEEK(NOW());
Risultato:
+---------------------+-------------+ | NOW() | WEEK(NOW()) | +---------------------+-------------+ | 2021-05-17 08:36:12 | 20 | +---------------------+-------------+
Argomenti non validi
Quando viene passato un argomento non valido, WEEK()
restituisce null
:
SELECT WEEK('2030-65-78');
Risultato:
+--------------------+ | WEEK('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 WEEK()
con il numero errato di argomenti, o senza passare alcun argomento, si verifica un errore:
SELECT WEEK();
Risultato:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
E un altro esempio:
SELECT WEEK('2030-12-10', 1, 2);
Risultato:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' 2)' at line 1