MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como LAST_DAY() funciona no MariaDB


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'