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