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 02-04-2009
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
operaciones con fechas

hola nuevamente...

en delphi hay unas funciones que nos permiten hacer operaciones con las fechas, por ejemplo incmoth o incweek, etc. y me gustaría saber si exite en firebird alguna función que se asemeje a éstas.

nuevamente mil gracias


Gustavo Cruz
Responder Con Cita
  #2  
Antiguo 03-04-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola GustavoCruz,
Desde Firebird 1.0 en Windows y 1.5 en Linux, existen las UDFs que buscas:

Código SQL [-]
AddDay(atimestamp, number)
AddHour(atimestamp, number)
AddMilliSecond(atimestamp, number)
AddMinute(atimestamp, number)
AddMonth(atimestamp, number)
AddSecond(atimestamp, number)
AddWeek(atimestamp, number)
AddYear(atimestamp, number)

Revisa el documento "Firebird Languaje Reference Update". Allí están documentadas. Si empleas Firebird 2.1 sería oportuno que revises el Release Notes para ver si algo ha cambiado, o si se ha añadido más.

Si deseas restar, en number debes pasar un valor negativo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 04-04-2009
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Gracias delphius.

Ahora tengo otro interrogante, me gustaría saber cómo puedo hacer para que al momento de cambiar de mes siempre me quede en el último día del mismo, por ejemplo

31/01/2009
28/02/2009
31/03/2009
30/04/2009

Gracias nuevamente
Responder Con Cita
  #4  
Antiguo 05-04-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Ummm.... ¿desde Firebird? La verdad es que allí ya me mataste Tendría que pensarlo, desconozco si hay alguna UDF que regrese la cantidad de días del mes...

Sería bueno que indicaras que versión de Firebird empleas. Al menos revisando la documentación que yo tengo de la 1.5 (es la que uso) no encuentro algo. Seguramente alguien más ilustrado nos puede iluminar, ¿Jhonny estás allí?

Desde Delphi sería otra cosa, creo que en la unidad DateUtils hay ya una función que calcula lo que buscas... si no equivoco es DaysInAMonth.

De última, la creas. Te podrías basar en la función de Delphi.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 05-04-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Ahora que lo pienso... ¿y si en vez de sumarle n meses, le sumas n + 1 y le restas los m días que tengas?

Es decir que si por ejemplo, que hoy es 04/04 y deseamos que el plazo sea a Julio (31/07) en vez de sumarle n = 3, le sumamos n = 3 + 1 = 4:

Temporalmente nos queda: 04/08.

Le restamos los 4 días, y... finalmente tenemos 31/07.

En teoría funciona. No lo he probado...

EDITO:

Lo he probado, por ejemplo algo así:
Código SQL [-]
select cast(AddDay(AddMonth(CURRENT_DATE,4),-4) as TIMESTAMP) FROM TABLA1

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 05-04-2009 a las 03:05:44. Razón: Error, son m días no m + 1. Agrego ejemplo.
Responder Con Cita
  #6  
Antiguo 05-04-2009
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Poder: 18
Gallosuarez Va por buen camino
Talking

Gustavo:

Cuando empecé a programar en Firebird tuve la necesidad de hacer una funcion que si le mandada cualquier fecha dentro de los primeros quince dias del mes, esta me regresara todos los dias de la primera quincena de dicho mes. De la misma manera, si la fecha estaba dentro de la segunda quincena, me regrasaba todos los dias de la segunda quincena.
Asi fue como la hice:
Código SQL [-]
CREATE OR ALTER PROCEDURE DAYSOFMONTH(
    D DATE) /* Date */
RETURNS (
    DOM DATE) /* Day of Month */
AS
DECLARE VARIABLE I INTEGER;
DECLARE VARIABLE LD INTEGER; /* Last Day */
BEGIN
  I = 1;
  LD = EXTRACT(DAY FROM (D - EXTRACT(DAY FROM D) + 32 - EXTRACT(DAY FROM D - EXTRACT(DAY FROM D) + 32)));
  IF (EXTRACT(DAY FROM D) > 15) THEN
    I = 16;
  ELSE
    LD = 15;
  DOM = D - EXTRACT(DAY FROM D) + I;
  WHILE (I <= LD) DO
  BEGIN
    SUSPEND;
    DOM = DOM + 1;
    I = I + 1;
  END
END

No dejes de contarnos si te funcionó para lo que tú querias.

Saludos.

Gerardo Suárez

P.D. Por cierto, cada que me es posible evito los funciones externas (UDF's)

Última edición por Gallosuarez fecha: 05-04-2009 a las 05:39:38.
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
Operaciones con fechas tifosi_loco SQL 2 06-12-2007 14:26:08
Operaciones con fechas jandres Varios 2 07-11-2006 19:16:27
operaciones entre fechas Torreblanca Varios 4 09-07-2005 20:20:27
Operaciones con fechas febito Oracle 1 05-08-2004 03:30:09
operaciones con fechas ing_alsaac Varios 2 11-05-2003 10:02:57


La franja horaria es GMT +2. Ahora son las 23:42:21.


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