Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-06-2011
amerika111 amerika111 is offline
Miembro
 
Registrado: nov 2009
Posts: 168
Poder: 0
amerika111 cantidad desconocida en este momento
Restarle dias a una fecha

hola, me pregunto si hay una funcion o una forma de que a una fecha determinada se le puedan restar una cantidad de dias.

ejemplo:

2011-06-30 menos 7 dias 2011-06-23
Responder Con Cita
  #2  
Antiguo 30-06-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No sé qué versión de Delphi uses, pero en la versión 7 tienes la unidad DateUtils con muchas rutinas para manejo de fechas, entre ellas, la función IncDay que hace lo que quieres (pasándolo un número negativo de días para restar en lugar de sumar).

// Saludos

Última edición por roman fecha: 30-06-2011 a las 18:16:35.
Responder Con Cita
  #3  
Antiguo 30-06-2011
amerika111 amerika111 is offline
Miembro
 
Registrado: nov 2009
Posts: 168
Poder: 0
amerika111 cantidad desconocida en este momento
Cita:
Empezado por roman Ver Mensaje
No sé qué versión de Delphi uses, pero en la versión 7 tienes la unidad DateUtils con muchas rutinas para manejo de fechas, entre ellas, la función IncDays que hace lo que quieres (pasándolo un número negativo de días para restar en lugar de sumar).

// Saludos

o pero esto queria saber si hay alguna manera de hacerlo en firebird
Responder Con Cita
  #4  
Antiguo 30-06-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Además de lo comentado por Román, puedes hacer lo siguiente:

Código SQL [-]
ValorFecha - 7

Saludos.

Al González.
Responder Con Cita
  #5  
Antiguo 30-06-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ja, ja, sí, mucho más sencillo . Estaba por recontestar eso pero te me adelantaste Cabe nada más mencionar que eso es así por la forma en que Delphi guarda las fechas/horas: en un valor real donde la parte entera son los días pasados desde una fecha fija y la parte fraccionaria los segundos transcurridos desde la media noche.

// Saludos
Responder Con Cita
  #6  
Antiguo 30-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por amerika111 Ver Mensaje
o pero esto queria saber si hay alguna manera de hacerlo en firebird
Ejemplo:
Código SQL [-]
SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP - 5) FROM RDB$DATABASE
Resta cinco días a la fecha actual.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 30-06-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Oh! ¡Vaya confusión! Debí fijarme que era el foro de Firebird. Lo siento

// Saludos
Responder Con Cita
  #8  
Antiguo 30-06-2011
amerika111 amerika111 is offline
Miembro
 
Registrado: nov 2009
Posts: 168
Poder: 0
amerika111 cantidad desconocida en este momento
Cita:
Empezado por Al González Ver Mensaje
Además de lo comentado por Román, puedes hacer lo siguiente:


Código SQL [-]ValorFecha - 7



Saludos.

Al González.
lo que pasa que la fecha a la que le quiero restar no es una variable esta dentro de un between

BETWEEN '2011-06-19' AND ('2011-06-19' - 7)
Responder Con Cita
  #9  
Antiguo 30-06-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por amerika111 Ver Mensaje
lo que pasa que la fecha a la que le quiero restar no es una variable esta dentro de un between

BETWEEN '2011-06-19' AND ('2011-06-19' - 7)
No hay problema. Haces un CAST para forzar el tipo y ya puedes restar directamente :

BETWEEN '2011-06-19' AND (cast('2011-06-19' as timestamp) - 7)

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #10  
Antiguo 30-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por amerika111 Ver Mensaje
lo que pasa que la fecha a la que le quiero restar no es una variable esta dentro de un between

BETWEEN '2011-06-19' AND ('2011-06-19' - 7)
Y entonces por qué le pasas como parámetro 2011-06-19?, pásale 2011-06-12 y listo.

También puedes poner algo así como:
Código SQL [-]
between cast('19.06.2011' as date)-7 and '19.06.2011'

Recuerda que será desde menor hasta mayor, no al revés.
Responder Con Cita
  #11  
Antiguo 30-06-2011
amerika111 amerika111 is offline
Miembro
 
Registrado: nov 2009
Posts: 168
Poder: 0
amerika111 cantidad desconocida en este momento
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Y entonces por qué le pasas como parámetro 2011-06-19?, pásale 2011-06-12 y listo.

También puedes poner algo así como:

Código SQL [-]between cast('19.06.2011' as date)-7 and '19.06.2011'



Recuerda que será desde menor hasta mayor, no al revés.

Si con las dos opciones se esta en lo correcto y funcional, de menor a mayor ok
Responder Con Cita
  #12  
Antiguo 04-07-2011
amerika111 amerika111 is offline
Miembro
 
Registrado: nov 2009
Posts: 168
Poder: 0
amerika111 cantidad desconocida en este momento
Cita:
Empezado por guillotmarc Ver Mensaje
No hay problema. Haces un CAST para forzar el tipo y ya puedes restar directamente :

BETWEEN '2011-06-19' AND (cast('2011-06-19' as timestamp) - 7)

Saludos.
se me ha presentado un caso, si fuera el caso restar dos pero seria en el rango de un horario de trabajo vespertino, tengo dos campos timestamp lo unico que inserto es la hora y lo que se inserta es

hora entrada 1899-12-30 08:00:00 p.m.
hora salida 1899-12-30 05:00:00 a.m.

y tendria que obtener las horas que hay entre esas horas, y como lo unico que inserto es la hora y no la fecha del dia. entonces se me ocurrio si hay una manera de detectar si una hora es am o pm
Responder Con Cita
  #13  
Antiguo 04-07-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por amerika111 Ver Mensaje
se me ha presentado un caso, si fuera el caso restar dos pero seria en el rango de un horario de trabajo vespertino, tengo dos campos timestamp lo unico que inserto es la hora y lo que se inserta es

hora entrada 1899-12-30 08:00:00 p.m.
hora salida 1899-12-30 05:00:00 a.m.

y tendria que obtener las horas que hay entre esas horas, y como lo unico que inserto es la hora y no la fecha del dia. entonces se me ocurrio si hay una manera de detectar si una hora es am o pm
Lo siento, no te he acabado de entender.

Pero si quieres detectar si una hora es AM o PM, piensa que el valor decimal representa la fracción del día.

Por tanto si es <= 0.5 es AM y si está entre 0.5 y 1 es PM.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #14  
Antiguo 04-07-2011
amerika111 amerika111 is offline
Miembro
 
Registrado: nov 2009
Posts: 168
Poder: 0
amerika111 cantidad desconocida en este momento
Cita:
Empezado por guillotmarc Ver Mensaje
Lo siento, no te he acabado de entender.

Pero si quieres detectar si una hora es AM o PM, piensa que el valor decimal representa la fracción del día.

Por tanto si es <= 0.5 es AM y si está entre 0.5 y 1 es PM.

Saludos.

hora entrada 1899-12-30 08:00:00 p.m.
hora salida 1899-12-30 05:00:00 a.m.


ok, y de una fecha como las de arriba como sacaria el valor decimal que me comentas..
Responder Con Cita
  #15  
Antiguo 05-07-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Dado que tienen el día 0, directamente el valor del campo ya debería ser solo un decimal con solo la parte de hora.

Si no estoy equivocado ya deberías poder comparar directamente si el campo es < 0.5 para saber si es AM o PM.

Saludos
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
dias totales de una fecha Nereida Varios 9 18-06-2008 14:28:43
Fecha con dos dias futuro por qué?... ronimaxh Conexión con bases de datos 2 01-02-2008 20:07:49
DIFERENCIA de Dias entre una fecha y la fecha del sistema drakkon MySQL 1 11-06-2007 10:34:06
Sumar Dias a una fecha? danytorres SQL 1 16-01-2004 05:04:15
Dias entre una fecha y la fecha del sistema afarenas Firebird e Interbase 1 30-09-2003 17:36:53


La franja horaria es GMT +2. Ahora son las 12:41:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi