MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona YEARWEEK() in MariaDB

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'