"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como conseguir comparações precisas de datas com DATE_FORMAT() no MySQL?

Como conseguir comparações precisas de datas com DATE_FORMAT() no MySQL?

Publicado em 2024-11-03
Navegar:286

How to Achieve Accurate Date Comparisons with DATE_FORMAT() in MySQL?

Comparação de datas do MySQL com DATE_FORMAT()

Neste artigo, exploraremos como realizar comparações de datas no MySQL usando o método DATE_FORMAT() função, abordando um problema específico enfrentado por um usuário ao comparar datas.

O problema

O usuário enfrentou um desafio ao comparar datas usando DATE_FORMAT(). As datas foram armazenadas no seguinte formato: '%d-%m-%Y', que não é um formato facilmente classificável. Usando a consulta abaixo, o usuário tentou comparar as datas:

SELECT DATE_FORMAT(DATE(starttime), '%d-%m-%Y')
FROM data
WHERE DATE_FORMAT(DATE(starttime), '%d-%m-%Y') >= '02-11-2012';

No entanto, o resultado incluiu '28-10-2012', que foi incorreto de acordo com as expectativas do usuário.

A solução

O problema surge porque estamos comparando strings em vez de datas. DATE_FORMAT() converte uma data em uma string e as strings são comparadas lexicograficamente. Neste caso, '28-10-2012' é maior que '02-11-2012' lexicograficamente, embora '02-11-2012' seja uma data posterior.

Para comparar datas com precisão, precisamos para compará-los como datas, não como strings. Podemos usar a função DATE() para extrair o componente de data do campo starttime e então comparar as datas usando o operador >=, conforme mostrado na consulta a seguir:

SELECT DATE_FORMAT(DATE(starttime), '%d-%m-%Y')
FROM data
WHERE DATE(starttime) >= DATE('2012-11-02');

Esta consulta comparará corretamente as datas e excluirá '28-10-2012' do resultado.

Considerações adicionais

Vale a pena considerar se o horário de início do campo DATETIME pode ser alterado para um campo DATE. Isso eliminaria a necessidade de conversões repetidas, melhorando potencialmente o desempenho.

Declaração de lançamento Este artigo foi reimpresso em: 1729738847 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3