• Viernes 8 de Noviembre de 2024, 15:43

Autor Tema:  Filtrar Por Fechas En Formato Español  (Leído 8336 veces)

Berta

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Filtrar Por Fechas En Formato Español
« en: Miércoles 23 de Noviembre de 2005, 13:56 »
0
Buenas Compañer@s:

Me encuentro con un problema bastante serio al ejecutar una consulta en la que quiero filtrar por un campo de tipo fecha con formato dd/mm/yyyy, cuando el DIA de la fecha por la que quiero filtrar es menor de 13, ya que al llegar la SQL a MS Access ésta se pone en formato mm/dd/yyyy. (cuando el día es 13 o mayor el filtro se ejecuta bien ya que MS Access no puede poner el DIA en el lugar del MES).

Este problema lo he detectado al ejecutar la consulta desde una aplicación VB6 SP6, así como al teclear la consulta directamente en la base de datos MS Access, en la vista SQL.

Las pruebas las he realizado con MS Access 2000, MS Access XP y MS Access 2003; detectándose el mismo problema en los tres productos.

A continuación se detallan tres ejemplos que reproducen el problema:

Imaginese una tabla con los siguientes campos:

Tabla Empleados:
ID                    Autonumérico    'Código del empleado
Nombre             Texto               'Nombre del empleado
FechaNacimiento Fecha              'Fecha de nacimiento del empleado


Al realizar una consulta para obtener los empleados
que han nacido entre el 21 de noviembre de 1980
(21/11/1980) y el 2 de enero de 1981 (02/01/1981)
la comparación con la segunda fecha (02/01/1981)
se traduce automáticamente al formato ingles
(01/02/1981) devolviendo la SQL un conjunto de
datos no acorde con lo solicitado.

Ejemplos:

Ejemplo1: la siguiente consulta devuelve un
conjunto de datos en el que se incluyen los
empleados que han nacido entre el 21 de noviembre
de 1980 y el 1 de febrero de
de 1981; cuando debería devolver los nacidos entre
el 21 de noviembre de 1980 y el 2 de enero de
1981.

SELECT Id, Nombre
FROM Empleados
WHERE FechaNacimiento BETWEEN #21/11/1980# AND
#02/01/1981#


Ejemplo2: la siguiente consulta también devuelve
un conjunto de datos en el que se incluyen los
empleados que han nacido entre el 21 de noviembre
de 1980 y el 1 de febrero de
de 1981; cuando debería devolver los nacidos entre
el 21 de noviembre de 1980 y el 2 de enero de
1981.

SELECT Id, Nombre
FROM Empleados
WHERE FechaNacimiento >= #21/11/1980#
     AND FechaNacimiento <= #02/01/1981#


Ejemplo3: es esta consulta más simple también tengo el mismo problema
SELECT Id, Nombre
FROM Empleados
WHERE FechaNacimiento <= #02/01/1981#

Un Saludo y Gracias desde ya
Berta

nelson_z

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Filtrar Por Fechas En Formato Español
« Respuesta #1 en: Miércoles 23 de Noviembre de 2005, 17:31 »
0
El visual basic trae una Funcion que se llama Format... con la cual puedes darle el formato a la cadena Fecha que estas obteniento esto es:

 Format(FechaNacimiento , "dd/MM/yyyy")

o si estas usando un DateTimePicker para agarrar la fecha... le puedes dar este formato en las Propiedades
Format seleccionas el valor que dice 3 - dtpCustom y en la propiedad CustomFormat le pones dd/MM/yyyy... y asi  no importa en que lenguaje tengas tu S.O.

espero que esto te funcione!!... y si no me avisas...

Hasta Luego

belragazzo

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Filtrar Por Fechas En Formato Español
« Respuesta #2 en: Jueves 18 de Septiembre de 2008, 23:22 »
0
Bueno este post fue hace 3 años, pero estaba pasando por aqui y no se si solucionaste el problema, voy a poner algo que a mi me ha funcionado para los que anden buscando informacion sobre esto, para empezar el formato que visual basic utiliza es mm/dd/yyyy, independientemente del que tengas configurado en tu OS.

Solo por rango de fechas:
"SELECT * FROM Movimientos WHERE Fecha >= #" & Format(dtpDesde.Value, "mm/dd/yyyy") & "# and Fecha <= #" & Format(dtpHasta.Value, "mm/dd/yyyy") & "#"

Ejemplo de filtro de movimientos por Motorista y Rango de fechas:
"SELECT * FROM Movimientos WHERE ((Motorista >= '" & cmbMotorista2.Text & "') And (Motorista <= '" & cmbMotorista2.Text & "' )) And (Fecha >= #" & Format(dtpDesde.Value, "mm/dd/yyyy") & "#) And (Fecha <= #" & Format(dtpHasta.Value, "mm/dd/yyyy") & "#)"

espero le sirva  a alguien, suerte...