Funciones para búsquedas con fechas en Access

  • Por
Realizar búsquedas en Access utilizando, en las condiciones del Where, campos de tipo fecha. Funciones útiles.

Búsquedas con fechas en Access

Hemos recibido una pregunta recientemente de un amigo que deseaba realizar búsquedas en Access utilizando, en las condiciones del Where, campos de tipo fecha. Después de varios intentos hemos rescatado un par de notas que pueden ser interesantes para publicar. Seguro que sirven de ayuda a otras personas que tengan que trabajar con fechas en consultas de Access.

La consulta era la siguiente:

Tengo una tabla con varios campos. Dos de ellos son fechas, que correspoden con un intervalo. Uno de ellos es la fecha de inicio del intervalo (fechadesde) y otro la de final del intervalo (fechahasta)

Quisiera saber cómo se puede hacer una consulta SQL en Access para obtener los registros cuyo intervalo de fechas contenga el día de hoy.

Es decir, que la fecha desde sea menor que hoy y la fecha hasta sea mayor que hoy.

Estuvimos primero haciendo un par de pruebas sin éxito, comparando las fechas con operadores artitméticos. En algunos casos obtuvimos la respuesta esperada, pero no siempre funcionaban las sentencias y teníamos problemas al ejecutarlas desde Access o desde el servidor web, porque no devolvían los mismos resultados.

Función DateDiff()

Al final, la respuesta que propusimos pasó por utilizar la función DateDiff, que sirve para obtener la diferencia entre dos fechas. Por ejemplo:

DateDiff("y", #06/10/2004#, Now())

Nos dice los días que han pasado desde el seis de octubre de 2004.

Nosotros podemos utilizarla como condición en un where de una sentencia SQL. Por ejemplo, para una sentencia como esta:

DateDiff("y",A,B)

  • Si son iguales, la función devolverá cero.
  • Si A es una fecha anterior a B, entonces la función devolverá un número de días que será mayor que cero.
  • Si A es una fecha posterior a B, entonces devolverá un número de días que será menor que cero.
Tenemos que comparar el día de hoy con las fechas desde y hasta. Hoy tiene que ser mayor que desde y menor que hasta. Nos queda como resultado esta sentencia.

SELECT * FROM vuelos WHERE
DateDiff('y',fechadesde,now())>=0
and DateDiff('y',fechahasta,nom())<=0

Nota: Hay que tener cuidado con el idioma de las fechas, pues en castellano se escriben de manera distinta que en inglés. Access intenta interpretar la fecha correctamente, por ejemplo, si introducimos 02/26/04 pensará que está trabajando en fechas en inglés y si introducimos 26/02/04 pensará que estamos escribiendo las fechas en castellano. El problema es con una fecha como 02/02/04 que su valor dependerá de cómo esté configurado el Access, en castellano o inglés.

Función DatePart

Sirve para extraer parte de una fecha. Recibe dos parámetros, el primero indica mediante un string la parte a obtener. El otro parámetro es la fecha con la que se desea trabajar.

DatePart("m",fecha)

En este caso se está indicando que se desea obtener el mes del año. Otro valor posible para el primer parámetro es, por ejemplo "yyyy", que se utiliza para obtener el año con cuatro dígitos. Un ejemplo de sentencia SQL que utiliza esta función puede ser la siguiente:

SELECT DatePart("yyyy",validezdesde) FROM vuelos

Función DateAdd

Esta última función que vamos a ver en el presente artículo sirve para añadir a la fecha, algo como días, meses o años. Para ello la función recibe tres parámetros, el primero corresponde con un string para indicar las unidades de lo que deseamos añadir, por ejemplo, días, meses o años. El segundo parámetro es el número de días meses o años a adicionar y el tercer parámetro es la fecha a la que sumar esos valores. Vemos un ejemplo de su sintaxis:

DateAdd("yyyy",10,validezdesde)

En este ejemplo la función DateAdd devolvería una fecha diez años posterior a validezdesde. Otros valores para el string del primer parámetro son "d", para añadir días, o "m", para añadir meses.

Un ejemplo del funcionamiento de esta función en una sentencia SQL es el siguiente:

SELECT DateAdd("yyyy",10,validezdesde) FROM vuelos

Autor

Miguel Angel Álvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Otto

21/10/2004
Con las fechas hay que tener encuenta el formato con el que trabaja Access, mm/dd/yyyy, por lo que si queremos crear sentencias SQL hay que utilizar Me.Filter = “PROVEEDORS.FechaRevision Between # “ & Format(Me.TextoDesde, “mm dd yyy”) & “# And #” & Format(Me.TextoHasta, “mm dd yyyy”) & “#”

Roberto

22/10/2004
Puedes usar campos TEXT de 10 para almacenar la fecha en formato YYYY-MM-DD (para poder hacer filtros correctos entre fechas).
Evitarás problemas de migración a otras bases de datos pues un CHAR es estandar en todos los SGBD.

No quiero decir que sea mejor opción, pero sí que la tomes en cuenta.

Cesar

08/5/2006
Tambien funciona con el siguiente sql:

SELECT * FROM tabla WHERE ((tabla.fecha) Between #01/01/50# And #01/12/03#);

norman

03/12/2008
Otto no se quien sos pero me salvaste la vida. Gracias a DIOS que me ayudó a encontrarte =))))))))))))))))))))))))

JAVIER

05/2/2009
Yo estuve probando con la funcion date() y esta devuelve la fecha actual del sistema con el formato dd/mm/yyyy es como esta configurado mi sistema pero en la consulta Select Nombre FROM Datos Where = #mm/dd/yyyy# asi funciona por que acces trabaja asi con mm/dd/yyyy

SELECT Nombre
FROM Datos
WHERE Fecha = #02/04/2009#;
y en mi bd tengo 04/02/2009

Ahmet Samaniego

25/4/2009
Sobre el articulo de las funciones de fechas
Muy bien explicado

MONI

29/4/2009
FECHA DE CUMPLEAÑOS
HOLA...TENGO UN PROBLEMA NECESITO HACER UNA CONSULTA QUE ME PERMITA VERIFICAR CUALES DE LOS CLIENTES REGISTGRADOS SE ENCUENTRA DE CUMPLEAÑOS....ESPERO QUE ME PUEDAN AYUDAR
GRACIAS

emmanuel

20/7/2009
dudas
hola amigos, necesito ayuda, kiero hacer una consulta en access por fecha, es decir q al introducir cierta fecha me de los datos que tengo de esa fecha en adelante, o en su caso anteriores a la fecha, espero me puedan ayudar, gracias

gabriel

23/10/2009
Agrego algo mas
para obtener solo la fecha (sin la hora) se puede utilizar lo siguiente

int(fecha) o ent(fecha)

si tenemos 20/09/2008 10:55 a.m. con esta función obtenemos 20/09/2008

Martin

28/10/2009
Consulta
Hola mi consulta es sobre fechas, tengo un listado de ellas y quiero que me muestre solamente los registros que no tienen valor o el valor es cero, Se entiende.
Estoy haciendo un trabajo para el colegio y en una de las consultas que tengo que realizae en access para hacer un informe me pide que muestre las fechas a las que no se le cargaron valores

Pablo

30/12/2009
Funcion productoria en Access
Estimados: alguno de Uds sabe como realizar una funcion productoria en una consulta de Access? Es decir, obtener el producto de n valores de un mismo campo?

orlando

09/3/2010
borrar registro
hola espero me puedan ayudar miren tengo 3 tablas relacionadas y si jalan bien pero ahora como borro un registro y que borre en cascada hacia las otras 2 tablas..

gracias

cecilia

09/4/2010
fechas en access
hola espero me puedan ayudar, si tengo varios años en la base de datos y quiero saber las ventas totales que se hicieron en cada año como hago? gracias

aryadna

11/9/2010
que es access
wola¡¡¡¡¡¡¡¡¡¡ mE GUsTAria qUE mE apOLllaRan DICIeNDOme QUE ES aCcEsS PORFA.....

alpha0

06/4/2011
access y calendarios
buenas, primero que todo muchas gracias por la atencion que le van a prestar a mi pregunta.

tengo una informacion que tengo que meter en una db de access es de una finca productora de leche, necesito saber como o que debo de hacer para que en cada formulario me salga el calendario y de acuerdo con cada fecha me abra un campo para introducir un valor a esa fecha,
me explico mejor: tengo el formulario de una vaca para llevar un registro de cuanta leche da por dia,
asi en el calendario dar la fecha para introducir los litros de leche, o si tengo que crear un formulario por cada dia producido,
muchas gracias

rocha

20/5/2011
Fechas en access
Buenas noches, requiero ayuda.
Estoy trabajando en acces y requiero igualar 2 fechas.

Tengo 2 tablas dif.
1- Ventas diarias con el campo: fechaCompra y CostoCompra
2.- CostoArt con el campo: FechaArt y costoArt

Ya q los articulos cambian de costo cada mes ya he usado la función DatePart para sacar el mes y el año de ambos campos, ya q si la compra fue echa en el mes de mayo del 2010 es un costo pero para mayo del 2011 es otro, eso ya lo resolvi.

Ahora necesito llenar el valor Costo Articulo con algo asi:

Si fecha1=Fecha2, entonces CostoCompra =costoAsrticulo.

no se como quedaria la sintaxis y si es necesario se ponga en una consulta, no tengo idea, espero m puedan ayudar,

gracias

ricardo_soto-416354

27/7/2011
Fechas SQL
Estimados con mucho éxito he trabajado las fechas en bases de datos .dbc de vfoxpro. El campo es TEXT 10 (C) y TEXT (19) cuando tiene hora. Antes de guardar los datos tiene todas las validaciones de un campo fecha. Luego he podido crear cualquier consulta SQL que contenga fechas, y todas han funcionado bien y muy rápido. Celular Chile 98415909. Las tablas tiene casi un millón de registros.

alejandro

02/9/2011
sql como lenguaje puede, o tiene que relizar las tareas como access?
Hola un saludo de ante mano.
En una pequeña empresa en la que laboro tenemos la base de datos en access, sin saber mucho del programa he podido adecuar las consultas en dicho programa, actualmente uno de los dirigentes opta por cambiar office de microsof por open office por ser un programa de codigo abierto o de distribucion gratuita, este office contiene un gestor de base de datos similar a access la diferncia que y todo parece igual pero la forma de hacer las consultas me muestra directamente el codigo que se va generando. mi pregunta es en access al hacer una consulta y estando en modo de diseño en la parte que dice criterios al escribir [que criterio] dentro de estos corchetes. al comenzar la consulta o dar dole click me despliega una caja de mensaje preguntando que criterio? y a un lado el cuadro de dialogo para introducir el criterio, si el criterio es cierto me depliega los datos solicitados. mi pregunta es se puede hacer o cual seria el codigo para que se comportara la base de oppen oficce igual, esto seria en sql. por la atencion gracias saludos

cristhian ferreira

09/3/2013
access
nesecito qe me ayuden con la formla para consular solo el mes anterior en access
deseo que aparezca en una factura

JUAN

26/9/2013
CONSULTA CON FECHAS
Hola compañeros. A ver si me podéis echar un cable con una duda que tengo y no se como solucionarlo con una consulta de sql en access.
Tengo una consulta con datos y necesito filtrarlo porque una etiqueta la puedo utilizar con diferentes nombres y la tengo que acotar con fechas. He creado dos columnas un de FECHA INICIO y otra de FECHA FIN. Mi problema es que quiero que la consulta me devuelva datos desde FECHA INICIO hasta FECHA FIN, (si otra persona utiliza esa misma etiqueta como lo tengo acotado con fecha fin no me han de salir más datos a no ser que la dé de alta de nuevo con otro nombre)y desde FECHA INICIO y si no tengo fecha fin informada que también me salgan los datos. He conseguido que me salgan lo que tienen informada FECHA INCIO y FECHA FIN pero no me salen los que no tienen informada FECHA FIN.

Federico

04/5/2014
Consulta de acceess
hola buen dia,
quisiera saber si me podrias ayudar, mi problema es que me dieron una base de datos en la cuales tiene funciones incorrectas las cuales quiero cambiar, mi problema es el siguiente:
quiero hacer que me me separe por edades los chicos/as que van a diferentes cursos.
depende las edades son los cursos que tienen
la funcion que esta puesta es la funcion "Entre" pero no me sirve debido a que me tira solo algunos chicos/as
cual funcion deberia usar.

Desde ya muchas gracias

saludos