Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Suma o resta de fechas (https://www.clubdelphi.com/foros/showthread.php?t=13777)

el_enigma1 31-08-2004 01:36:04

Suma o resta de fechas
 
Yo se que en SQLServer se puede sumar fechas, pero no se si se puede hacer lo mismo en interbase 6.
Se trata de sumar sumar meses o años a una fecha mediante sql, la fecha podria entrar como parametro o ya estar capturada en la base de datos.
De antemano gracias por la ayuda.

jachguate 31-08-2004 05:11:11

Interbase tiene soporte completo para aritmética de fechas. La fecha puede o no estar en la base de datos, así como la cantidad de dias a sumar/restar de esta.

Es tan simple como:
Código SQL [-]
Select 'now' + 30
  form rdb$database;

Saludos.

;)

el_enigma1 02-09-2004 21:27:44

Cita:

Empezado por jachguate
Interbase tiene soporte completo para aritmética de fechas. La fecha puede o no estar en la base de datos, así como la cantidad de dias a sumar/restar de esta.

Es tan simple como:
Código SQL [-]
Select 'now' + 30
  form rdb$database;

Saludos.

;)

pero si yo quiero sumar meses es decir si yo tengo una fecha 14 de octubre del 2004 en interbase se veria como 10/14/04 y yo quiero sumarle 18 meses y que me muestre 14 de abril del 2006 o sea 4/14/06 o si le sumo solo 6 meses me muestre 14 de abril del 2005 o sea 4/14/05.
se puede hacer de esta manera?
Debi a ver sido mas especifico desde el principio.

antrax 02-09-2004 23:49:25

Espero y sirva...
 
checate la siguiente instrucción, la he probado en sql server y tal vez se soporte en Interbase..

DATEDIFF

Devuelve el número de límites de fecha y hora que hay entre dos fechas especificadas.

Sintaxis

DATEDIFF ( datepart , startdate , enddate )

Argumentos

datepart

Es el parámetro que indica en qué parte de la fecha se calcula la diferencia.

La tabla enumera las partes de las fechas y abreviaturas reconocidas por Microsoft® SQL Server™.

Parte de la fecha------Abreviaturas
------------------------------------------
Año-------------------yy,yyyy
Mes-------------------mm,m
Dia del Año-------------dy,y
Dia----------------------dd,d
Semana-------------------wk,ww
Horas------------------------hh
Minutos --------------------mi,n
Segundos----------------------ss,s
Milisegundos--------------------ms


startdate

Es la fecha de comienzo para el cálculo. startdate es una expresión que devuelve un valor datetime o smalldatetime, o una cadena de caracteres con formato de fecha.

Puesto que smalldatetime es exacto únicamente en el minuto, cuando se utiliza un valor smalldatetime los segundos y milisegundos son siempre 0.

enddate

Es la fecha final para el cálculo. enddate es una expresión que devuelve un valor datetime o smalldatetime, o una cadena de caracteres con formato de fecha.

Tipos devueltos

integer

Ejemplo

En este ejemplo se determina la diferencia en días entre la fecha actual y la fecha de publicación de los títulos de la base de datos pubs.

USE pubsGOSELECT DATEDIFF(day, pubdate, getdate()) AS no_of_daysFROM titles

el_enigma1 08-09-2004 05:00:14

Cita:

Empezado por antrax
checate la siguiente instrucción, la he probado en sql server y tal vez se soporte en Interbase..

DATEDIFF

Devuelve el número de límites de fecha y hora que hay entre dos fechas especificadas.

Sintaxis

DATEDIFF ( datepart , startdate , enddate )

Argumentos

datepart

Es el parámetro que indica en qué parte de la fecha se calcula la diferencia.

La tabla enumera las partes de las fechas y abreviaturas reconocidas por Microsoft® SQL Server™.

Parte de la fecha------Abreviaturas
------------------------------------------
Año-------------------yy,yyyy
Mes-------------------mm,m
Dia del Año-------------dy,y
Dia----------------------dd,d
Semana-------------------wk,ww
Horas------------------------hh
Minutos --------------------mi,n
Segundos----------------------ss,s
Milisegundos--------------------ms


startdate

Es la fecha de comienzo para el cálculo. startdate es una expresión que devuelve un valor datetime o smalldatetime, o una cadena de caracteres con formato de fecha.

Puesto que smalldatetime es exacto únicamente en el minuto, cuando se utiliza un valor smalldatetime los segundos y milisegundos son siempre 0.

enddate

Es la fecha final para el cálculo. enddate es una expresión que devuelve un valor datetime o smalldatetime, o una cadena de caracteres con formato de fecha.

Tipos devueltos

integer

Ejemplo

En este ejemplo se determina la diferencia en días entre la fecha actual y la fecha de publicación de los títulos de la base de datos pubs.

USE pubsGOSELECT DATEDIFF(day, pubdate, getdate()) AS no_of_daysFROM titles

No me funciono.

rmora03 11-10-2013 18:11:35

Hola Antrax, talvez me puedas orientar:

Estoy haciendo un procedimiento con Firebird 2.1 e IBExpert que debe calcular los intereses diarios de acuerdo a una diferencia entre fechas. He puesto en practica tu recomendacion a enigma, sin embargo al ejecutar el procedimiento me emite el siguiente mensaje: "OverFlow occurred during data type conversion. conversion error from string "7-Oct-2013" '. Te inserto parte del codigo del procedimiento para un mejor entendimiento.

SELECT FC.FECHA_VENCE, FC.MONTO_INTER_CORR
FROM FINAN_CUOTAS FC
WHERE FC.ID_FINANCIAMIENTO = :CODIGO AND FC.PERIODO_VENCE = :PERIODO
INTO :MONTO_INT_MES, :FECHA_VENCE;

d = datediff(day,:FECHA_VENCE, :FECHA_CORTE); -- d es una variable declarada como entero, fecha_corte es un parametro designado como date
if (d > 0) then
begin
MONTO_INTER_CORR_DIAS = ((:MONTO_INT_MES / :DIAS_MES) * :d);
end

Agrdezco de antemano la ayuda que me puedas (an) brindar.

Saludos

Casimiro Notevi 11-10-2013 19:06:00

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)


Por cierto, este hilo es de hace 13 años, crea uno nuevo siguiendo las normas del foro, gracias.

jhonny 11-10-2013 20:27:55

Saltándome un poco las reglas, me gustaría preguntarte, ¿:FECHA_VENCE y :FECHA_CORTE, realmente son de tipo date, time o timestamp?, si no es así, quizá un cast te ayude, cambiando:

Código SQL [-]
d = datediff(day,:FECHA_VENCE, :FECHA_CORTE);

por

Código SQL [-]
d = datediff(day, cast(:FECHA_VENCE as DATE), cast(:FECHA_CORTE as DATE));


La franja horaria es GMT +2. Ahora son las 03:11:48.

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