No MariaDB,
LAST_DAY()
é uma função interna de data e hora que retorna o último dia do mês para uma determinada data. Ele aceita um argumento, que é a data para a qual você deseja encontrar o último dia do mês.
Sintaxe
A sintaxe fica assim:
LAST_DAY(date)
Onde
date
é a expressão de data para a qual você deseja localizar o último dia do mês. Exemplo
Aqui está um exemplo:
SELECT LAST_DAY('2030-02-01');
Resultado:
+------------------------+ | LAST_DAY('2030-02-01') | +------------------------+ | 2030-02-28 | +------------------------+
Nesse caso, estamos usando uma data em fevereiro. Como se vê, fevereiro tem 28 dias naquele ano.
Aqui está o que acontece se incrementarmos a data para o próximo ano bissexto:
SELECT LAST_DAY('2032-02-01');
Resultado:
+------------------------+ | LAST_DAY('2032-02-01') | +------------------------+ | 2032-02-29 | +------------------------+
Valores de data e hora
Também funciona com valores de data e hora:
SELECT LAST_DAY('2030-02-01 10:30:45');
Resultado:
+---------------------------------+ | LAST_DAY('2030-02-01 10:30:45') | +---------------------------------+ | 2030-02-28 | +---------------------------------+
Zero Datas
Zero datas resultam em
null
. Exemplo:
SELECT LAST_DAY('0000-00-00');
Resultado:
+------------------------+ | LAST_DAY('0000-00-00') | +------------------------+ | NULL | +------------------------+
Datas numéricas
Também é possível passar datas como um número, desde que faça sentido como uma data.
Exemplo
SELECT LAST_DAY(20301125);
Resultado:
+--------------------+ | LAST_DAY(20301125) | +--------------------+ | 2030-11-30 | +--------------------+
Ou mesmo o seguinte (que usa um ano de dois dígitos):
SELECT LAST_DAY(301125);
Resultado:
+------------------+ | LAST_DAY(301125) | +------------------+ | 2030-11-30 | +------------------+
Mas deve fazer sentido como uma data. Veja o que acontece se eu aumentar a parte do dia para um dia inválido:
SELECT LAST_DAY(20301135);
Resultado:
+--------------------+ | LAST_DAY(20301135) | +--------------------+ | NULL | +--------------------+ 1 row in set, 1 warning (0.000 sec)
Podemos verificar o aviso assim:
SHOW WARNINGS;
Resultado:
+---------+------+--------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------+ | Warning | 1292 | Incorrect datetime value: '20301135' | +---------+------+--------------------------------------+
Outros delimitadores
Você pode usar outros delimitadores para a data. O MariaDB é bastante tolerante quando se trata de delimitadores de datas. Aqui estão alguns exemplos válidos:
SELECT
LAST_DAY('2030/06/25'),
LAST_DAY('2030,06,25'),
LAST_DAY('2030:06:25'),
LAST_DAY('2030;06!25');
Resultado (usando saída vertical):
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 atual
Podemos passar
NOW()
como argumento datetime para usar a data atual:SELECT
NOW(),
LAST_DAY(NOW());
Resultado:
+---------------------+-----------------+ | NOW() | LAST_DAY(NOW()) | +---------------------+-----------------+ | 2021-05-18 09:39:01 | 2021-05-31 | +---------------------+-----------------+
Argumentos inválidos
Quando passado um argumento inválido,
LAST_DAY()
retorna null
:SELECT LAST_DAY('2030-65-78');
Resultado:
+------------------------+ | LAST_DAY('2030-65-78') | +------------------------+ | NULL | +------------------------+ 1 row in set, 1 warning (0.000 sec)
Confira o aviso:
SHOW WARNINGS;
Resultado:
+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '2030-65-78' | +---------+------+----------------------------------------+
Argumento ausente
Chamando
LAST_DAY()
com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro:SELECT LAST_DAY();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LAST_DAY'
E outro exemplo:
SELECT LAST_DAY('2030-12-10', '2031-12-10');
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LAST_DAY'