In MariaDB, LAST_DAY()
è una funzione di data e ora incorporata che restituisce l'ultimo giorno del mese per una determinata data.
Accetta un argomento, che è la data per la quale vuoi trovare l'ultimo giorno del mese.
Sintassi
La sintassi è questa:
LAST_DAY(date)
Dove date
è l'espressione di data per la quale vuoi trovare l'ultimo giorno del mese.
Esempio
Ecco un esempio:
SELECT LAST_DAY('2030-02-01');
Risultato:
+------------------------+ | LAST_DAY('2030-02-01') | +------------------------+ | 2030-02-28 | +------------------------+
In questo caso, stiamo usando una data a febbraio. A quanto pare, febbraio ha 28 giorni in quell'anno.
Ecco cosa succede se incrementiamo la data all'anno bisestile successivo:
SELECT LAST_DAY('2032-02-01');
Risultato:
+------------------------+ | LAST_DAY('2032-02-01') | +------------------------+ | 2032-02-29 | +------------------------+
Valori di data e ora
Funziona anche con i valori datetime:
SELECT LAST_DAY('2030-02-01 10:30:45');
Risultato:
+---------------------------------+ | LAST_DAY('2030-02-01 10:30:45') | +---------------------------------+ | 2030-02-28 | +---------------------------------+
Zero date
Le date zero risultano null
.
Esempio:
SELECT LAST_DAY('0000-00-00');
Risultato:
+------------------------+ | LAST_DAY('0000-00-00') | +------------------------+ | NULL | +------------------------+
Date numeriche
È anche possibile trasmettere le date come numero, purché abbia senso come data.
Esempio
SELECT LAST_DAY(20301125);
Risultato:
+--------------------+ | LAST_DAY(20301125) | +--------------------+ | 2030-11-30 | +--------------------+
O anche il seguente (che utilizza un anno a due cifre):
SELECT LAST_DAY(301125);
Risultato:
+------------------+ | LAST_DAY(301125) | +------------------+ | 2030-11-30 | +------------------+
Ma deve avere un senso come appuntamento. Ecco cosa succede se aumento la parte del giorno a un giorno non valido:
SELECT LAST_DAY(20301135);
Risultato:
+--------------------+ | LAST_DAY(20301135) | +--------------------+ | NULL | +--------------------+ 1 row in set, 1 warning (0.000 sec)
Possiamo controllare l'avviso in questo modo:
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
LAST_DAY('2030/06/25'),
LAST_DAY('2030,06,25'),
LAST_DAY('2030:06:25'),
LAST_DAY('2030;06!25');
Risultato (usando l'output verticale):
LAST_DAY('2030/06/25'): 2030-06-30 LAST_DAY('2030,06,25'): 2030-06-30 LAST_DAY('2030:06:25'): 2030-06-30 LAST_DAY('2030;06!25'): 2030-06-30
Data attuale
Possiamo passare NOW()
come argomento datetime per utilizzare la data corrente:
SELECT
NOW(),
LAST_DAY(NOW());
Risultato:
+---------------------+-----------------+ | NOW() | LAST_DAY(NOW()) | +---------------------+-----------------+ | 2021-05-18 09:39:01 | 2021-05-31 | +---------------------+-----------------+
Argomenti non validi
Quando viene passato un argomento non valido, LAST_DAY()
restituisce null
:
SELECT LAST_DAY('2030-65-78');
Risultato:
+------------------------+ | LAST_DAY('2030-65-78') | +------------------------+ | NULL | +------------------------+ 1 row in set, 1 warning (0.000 sec)
Controlla l'avviso:
SHOW WARNINGS;
Risultato:
+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '2030-65-78' | +---------+------+----------------------------------------+
Argomento mancante
Chiamando LAST_DAY()
con il numero errato di argomenti, o senza passare alcun argomento, genera un errore:
SELECT LAST_DAY();
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LAST_DAY'
E un altro esempio:
SELECT LAST_DAY('2030-12-10', '2031-12-10');
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LAST_DAY'