Funções para buscas com datas em Access

Buscas com datas em Access Recebemos uma pergunta recentemente de um amigo que desejava realizar buscas em Access utilizando, nas condições do Where, campos do tipo data. Depois de várias tentativas resgatamos umas anotações que podem ser interessantes para publicar. Seguro que servem de ajuda a outras pessoas que tenham que trabalhar com datas em consultas de Access.

A consulta era a seguinte:

Tenho uma tabela com vários campos. Dois deles são datas, que correspondem com um intervalo. Um deles é a data de início do intervalo (datadesde) e outro a de final do intervalo (dataate)

Queria saber como se pode fazer uma consulta SQL em Access para obter os registros cujo intervalo de datas contenha o dia de hoje.

Ou seja, que a data desde seja menor que hoje e data até seja maior que hoje. 

Estivemos primeiro fazendo duas provas sem êxito, comparando as datas com operadores aritméticos. Em alguns casos obtivemos a resposta esperada, porém nem sempre funcionavam as sentenças e tínhamos problemas ao executa-las desde Access ou desde o servidor web, porque não devolviam os mesmos resultados.

Função DateDiff()

Afinal, a resposta que propusemos passou por utilizar a função DateDiff, que serve para obter a diferença entre duas datas. Por exemplo:

DateDiff(“y”, #06/10/2004#, Now())

Conta-nos os dias que passaram desde seis de outubro de 2004.

Nós podemos utiliza-la como condição em um where de uma sentença SQL. Por exemplo, para uma sentença como esta:

DateDiff(“y”,A,B)

  • Se são iguais, a função devolverá zero.
  • Se A é uma data anterior a B, então a função devolverá um número de dias que será maior que zero.
  • Se A é uma data posterior a B, então devolverá um número de dias que será menor que zero.

Temos que comparar o dia de hoje com as datas desde e ate. Hoje tem que ser maior que desde e menor que ate. Fica como resultado esta sentença:

SELECT * FROM vuelos WHERE
DateDiff(‘y’,datadesde,now())>=0
and DateDiff(‘y’,dataate,nom())<=0

Nota: Há que ter cuidado com o idioma das datas, pois em português se escrevem de maneira diferente que em inglês. Access tenta interpretar a data corretamente, por exemplo, se introduzimos 02/26/04 pensará que está trabalhando em datas em inglês e se introduzimos 26/02/04 pensará que estamos escrevendo as datas em português. O problema é com uma data como 02/02/04 que seu valor dependerá de como esteja configurado o Access, em português ou em inglês.

Função DatePart
Serve para extrair parte de uma data. Recebe dois parâmetros, o primeiro indica mediante um string a parte a obter. O outro parâmetro é a data com a que se deseja trabalhar.

DatePart(“m”,data)

Neste caso está sendo indicado que se deseja obter o mês do ano. Outro valor possível para o primeiro parágrafo é, por exemplo “yyyy”, que se utiliza para obter o ano com quatro dígitos. Um exemplo de sentença SQL que utiliza esta função pode ser a seguinte:

SELECT DatePart(“yyyy”,validadedesde) FROM voos

Função DateAdd

Esta última função que vamos ver no presente artigo serve para acrescentar à data, algo como dias, meses ou anos. Para isso a função recebe três parâmetros, o primeiro corresponde com um string para indicar as unidades do que desejamos acrescentar, por exemplo, dias, meses ou anos. O segundo parâmetro é o número de dias, meses ou anos a adicionar e o terceiro parâmetro é a data a qual somar esses valores. Vemos um exemplo de sua sintaxe:

DateAdd(“yyyy”,10,validadedesde)

Neste exemplo a função DateAdd devolveria uma data dez anos posterior a validadedesde. Outros valores para o string do primeiro parâmetro são “d”, para acrescentar dias, ou “m”, para acrescentar meses.

Um exemplo do funcionamento desta função em uma sentença SQL é a seguinte:

SELECT DateAdd(“yyyy”,10,validadedesde) FROM voos

Fonte: http://www.criarweb.com/artigos/690.php

Deixe um comentário