Obtener fecha de un campo DateTime
#1
Escrito 04 marzo 2011 - 09:48
saludos!
#2
Escrito 04 marzo 2011 - 10:42
Lo hago de memoria, pero deberia funcionar
#3
Escrito 04 marzo 2011 - 11:21
#4
Escrito 04 marzo 2011 - 11:31
#5
Escrito 04 marzo 2011 - 12:26
Saludos
#6
Escrito 04 marzo 2011 - 02:56
SELECT date_in_out
FROM WORKED
where CAST(date_in_out AS DATE) = '03/03/2011'
no me devuelve nada pero si hago lo siguiente:
SELECT date_in_out
FROM WORKED
where CAST(date_in_out AS DATE) >= '03/03/2011'
esto si me funciona, lo que me dice que por guardar la hora en el campo no funciona, por lo tanto ... aparentemente no esta funcionando el cast, de hecho si le quito el cast me devuelve el resultado,
que puedo hacer?
#7
Escrito 04 marzo 2011 - 03:14
SELECT date_in_out FROM WORKED WHERE date_in_out = :p1 params.parambyname('p1').asdate = UnaVariableTipoFecha
Salud.
#8
Escrito 04 marzo 2011 - 03:37
Hola, sigo teniendo problemas, el cast no me funciona:
SELECT date_in_out
FROM WORKED
where CAST(date_in_out AS DATE) = '03/03/2011'
no me devuelve nada pero si hago lo siguiente:
SELECT date_in_out
FROM WORKED
where CAST(date_in_out AS DATE) >= '03/03/2011'
esto si me funciona, lo que me dice que por guardar la hora en el campo no funciona, por lo tanto ... aparentemente no esta funcionando el cast, de hecho si le quito el cast me devuelve el resultado,
que puedo hacer?
La verdad es que utilizo continuamente este tipo de conversiones (cast as date) y funcionan de maravilla.
¿ Seguro que tu base de datos no tiene algo extraño ?, ¿ no será dialecto 1 o algo así ?. Puesto que en estos modos de compatibilidad con versiones arcaicas de Interbase, los tipos de datos se tratan distinto.
¿ Seguro que hay registros de esa fecha ?, a veces las causas de los comportamientos extraños tienen razones tan sencillas como esta.
NOTA: Por cierto, ¿ supongo que ya sabes que si pasas una fecha como cadena lo tienes que hacer en formato americano (mes-día-año) y no en el que usamos habitualmente en castellano (día/mes/año) ?.
Esta consulta debería funcionar perfectamente :
SELECT date_in_out
FROM WORKED
where CAST(date_in_out AS DATE) = '03-03-2011'
Pero si quieres evitar el uso de conversiones cast, entonces utiliza esta consulta equivalente :
SELECT date_in_out
FROM WORKED
where date_in_out >= '03-03-2011' and date_in_out < '03-04-2011'
NOTA: Como comenta cannabis, yo también te recomiendo que utilices parámetros para la consulta.
Saludos.
#9
Escrito 04 marzo 2011 - 04:02
delphi
SELECT date_in_out FROM WORKED WHERE date_in_out = :p1 params.parambyname('p1').asdate = UnaVariableTipoFecha
Salud.
no creo que esto funcione ya que en el campo date_in_out hay datos como '03/03/2011 07:45:30 a.m.'
al igualarlo a una variable que solo contenga la fecha estaria haciendo lo mismo.
#10
Escrito 04 marzo 2011 - 04:18
Hola.
Hola, sigo teniendo problemas, el cast no me funciona:
SELECT date_in_out
FROM WORKED
where CAST(date_in_out AS DATE) = '03/03/2011'
no me devuelve nada pero si hago lo siguiente:
SELECT date_in_out
FROM WORKED
where CAST(date_in_out AS DATE) >= '03/03/2011'
esto si me funciona, lo que me dice que por guardar la hora en el campo no funciona, por lo tanto ... aparentemente no esta funcionando el cast, de hecho si le quito el cast me devuelve el resultado,
que puedo hacer?
La verdad es que utilizo continuamente este tipo de conversiones (cast as date) y funcionan de maravilla.
¿ Seguro que tu base de datos no tiene algo extraño ?, ¿ no será dialecto 1 o algo así ?. Puesto que en estos modos de compatibilidad con versiones arcaicas de Interbase, los tipos de datos se tratan distinto.
¿ Seguro que hay registros de esa fecha ?, a veces las causas de los comportamientos extraños tienen razones tan sencillas como esta.
NOTA: Por cierto, ¿ supongo que ya sabes que si pasas una fecha como cadena lo tienes que hacer en formato americano (mes-día-año) y no en el que usamos habitualmente en castellano (día/mes/año) ?.
Esta consulta debería funcionar perfectamente :
SELECT date_in_out
FROM WORKED
where CAST(date_in_out AS DATE) = '03-03-2011'
Pero si quieres evitar el uso de conversiones cast, entonces utiliza esta consulta equivalente :
SELECT date_in_out
FROM WORKED
where date_in_out >= '03-03-2011' and date_in_out < '03-04-2011'
NOTA: Como comenta cannabis, yo también te recomiendo que utilices parámetros para la consulta.
Saludos.
hola amigo, no soy un astro ni nada por el estilo en base de datos firebird pero....
estoy utilizando el dialecto1, podria estar generando esto algun problema?
#11
Escrito 04 marzo 2011 - 10:10
• Both dialects have a date/time type named DATE, but they are different types.
The dialect 1 DATE is equivalent to the dialect 3 TIMESTAMP, and the dialect 3
DATE is a date-only type not supported in dialect 1.
• Dialect 3 supports a TIME (time-of-day) type, which is unsupported in dialect 1.
Por esta razón es que el Cast como está planteado no funciona para el dialecto I.
Pienso que toca hacerlo a mano desde delphi, decodificando la fecha.
Aquí Sarko expone las diferente rutinas para trabajar con fechas.
Saludos
#12
Escrito 05 marzo 2011 - 03:49
SELECT date_in_out
FROM WORKED
WHERE CAST(date_in_out AS integer) = CAST(CAST('03.03.2011' as date) as integer)
La idea es ver si la fecha tipo "timestamp" al convertirla a entero te sirve como fecha.
En la fecha escrita, pongo puntos de separadores para que lo interprete como dd.mm.yyyy, lo convierto a date -timestamp en dialecto 1- para luego quedarme con su parte entera.
Creo que deberia funcionar, pero hace siglos que no uso el dialecto 1, siempre uso el 3 que es mejor en todo.
#13
Escrito 05 marzo 2011 - 10:05
#14
Escrito 05 marzo 2011 - 10:42
es una aplicacion muy pequeña , de hecho por ahora solo tendre 2 tablas.
agradezco sus comentarios, saludos!
#15
Escrito 05 marzo 2011 - 12:43
La otra forma que se me ocurre es hacer un >= a la fecha desde la 00:00:00 y un <= a la fecha hasta la 23:5959
Hola.
Para no tener que lidiar con el engorro de poner la hora del parámetro a las 59:59, lo más fácil en este caso es hacer una comparación mayor o igual a la fecha buscada (con hora 00:00) y menor estricto al día siguiente.
Es decir :
CAMPO_FECHA >= :DIA and CAMPO_FECHA < :DIA + 1
Saludos.
#16
Escrito 05 marzo 2011 - 12:44
hola amigos, creo que mejor creare de nuevo la base de datos con el dialecto 3 , no pense que fuera a tener problemas,
es una aplicacion muy pequeña , de hecho por ahora solo tendre 2 tablas.
agradezco sus comentarios, saludos!
Es lo mejor que puedes hacer (el Dialecto 1 solo es un modo de compatibilidad con versiones antiguas), si puedes evitar utilizarlo, mejor.
Saludos.
#17
Escrito 07 marzo 2011 - 04:58
Tienes un paso a paso en nuestra web (esta pensado para recuperacion en caso de catastrofe, pero el procedimiento es igual):
Paso 1: Crear una base de datos igual a la existente pero vacia en dialecto 3:
http://www.firebirdfaq.org/faq73/
NOTA: Normalmente yo uso "gbak -m rota.gdb vacia.gbk" y luego "gbak -c vacia.gbk vacia.gdb" pero parte de un fichero en dialecto 3, asi que no se si esto serviria, pero parece que no.
Paso 2: Copiarte los datos:
IBPump: http://www.hcsoft.ne...cer&hoja=ibpump