Veja alguns meios eficazes de determinar se um ano é bissexto ou não no MySQL.
Sabemos que alguns cálculos envolvendo anos ou dias dos anos pode se tornar complicados em função de alguns anos terem um dia a mais.
Neste texto, vou mostrar como determinar se um ano é bissexto ou não.
O fato de que um mês pode ter um dia a mais em alguns anos, já pode servir de complicador para realizar algumas contas.
Para determinar se uma determinada data cai ou não em um ano bissexto você deva obter o componente de ano, com a função YEAR() e testar este resultado.
Há um regra geral de que os anos bissextos são todos divisíveis por 4. Isto pode ser testado com o uso do operador de módulo, assim:
SELECT YEAR(DataNascimentoCliente) AS "Anos", YEAR(DataNascimentoCliente)% 4=0 AS "Anos normais/bissextos" FROM CadastroClientes LIMIT 10; +------+------------------------+ | Anos | Anos normais/bissextos | +------+------------------------+ | 1984 | 1 | | 1984 | 1 | | 1981 | 0 | | 1983 | 0 | | 1969 | 0 | | 1979 | 0 | | 1976 | 1 | | 1975 | 0 | | 1983 | 0 | | 1978 | 0 | +------+------------------------+
Os anos ‘1’ são bissextos.
Esta abordagem não é perfeita, contudo. O ano 1900 é também divisível por 4 e… não é bissexto.
Portanto, para que um ano seja qualificado como bissexto, precisa satisfazer a estas 2 condições:
- o ano tem que ser divisível por 4
- não pode ser divisível por 100, a menos que seja também divisível por 400
Vamos a uma query que faça estas filtragens:
SELECT YEAR(DataNascimentoCliente) AS ANO, (YEAR(DataNascimentoCliente) %4 = 0) AND (YEAR(DataNascimentoCliente) % 100 != 0) OR (YEAR(DataNascimentoCliente) % 400 = 0) AS "Teste completo" FROM CadastroClientes LIMIT 10; +------+----------------+ | ANO | Teste completo | +------+----------------+ | 1984 | 1 | | 1984 | 1 | | 1981 | 0 | | 1983 | 0 | | 1969 | 0 | | 1979 | 0 | | 1976 | 1 | | 1975 | 0 | | 1983 | 0 | | 1978 | 0 | +------+----------------+
Pronto. Este método é mais seguro que o anterior — mas pode ser desnecessário se o seu banco de dados não inclui a possibilidade de lidar com o ano 1900…