"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 > Por que a comparação de datas do MySQL com date_format está produzindo resultados inesperados?

Por que a comparação de datas do MySQL com date_format está produzindo resultados inesperados?

Publicado em 2024-11-12
Navegar:513

Why Is MySQL Date Comparison with date_format Yielding Unexpected Results?

Comparando datas MySQL com date_format

Apesar de tentar vários métodos de comparação de datas, um usuário encontrou um resultado inesperado. Eles tentaram comparar datas formatadas como '%d-%m-%Y', mas incluíram um registro errado no conjunto de resultados.

O problema decorre da comparação de strings em vez de datas. A função date_format converte datas em strings, tornando a comparação suscetível à ordenação lexicográfica. Por exemplo, '28-10-2012' é alfabeticamente maior que '02-11-2012', daí a sua inclusão no conjunto de resultados, apesar de ser cronologicamente anterior.

Para resolver isso, a comparação deve ser realizada em datas em vez de strings. A função de data pode ser usada para extrair o componente de data de um campo DATETIME ou DATE. Ao comparar as datas extraídas, a ordem cronológica é garantida.

Por exemplo:

select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';

Nesta consulta, date(starttime) extrai a data do campo starttime, que é então comparada com a data especificada em AAAA-MM Formato -DD. A função date_format é usada apenas para formatar o resultado.

Se starttime for um campo DATETIME, considere usar:

select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';

Esta consulta evita a conversão repetida de datas, pois a comparação é realizada diretamente no campo DATETIME.

Lembre-se, o ISO O padrão -8601 recomenda usar 'AAAA-MM-DD' como formato de data, mas o código fornecido segue o '%d-%m-%Y' especificado pelo usuário formato.

Declaração de lançamento Este artigo foi reimpresso em: 1729739525 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