Sumar Fechas

08/08/2006 - 18:57 por L.Barzi | Informe spam
Hola amigos quiero crear un sp que haga lo sgte:

Segun el registro de un pedido (ejemplo se registro hoy) fecha:
08/08/2006 sumarle 15 dias pero sin considerar sabados ni domingos
alguien tiene algo similar o me puede ayudar.

Gracias de antemano
Lima - Perú

Preguntas similare

Leer las respuestas

#1 Isaias
08/08/2006 - 19:56 | Informe spam
Barzi

No se me ocurre otra cosa, debes hacer una funcion que reciba la fecha y los
dias a sumar, internamente deberas sumar 1 dia x dia a la fecha, solo en caso
de ser sabado y domingo DATEPART(DW, GETDATE()) IN(1,7), no sumar, hasta
completar el numero de dias a sumar.
Saludos
IIslas


"L.Barzi" wrote:

Hola amigos quiero crear un sp que haga lo sgte:

Segun el registro de un pedido (ejemplo se registro hoy) fecha:
08/08/2006 sumarle 15 dias pero sin considerar sabados ni domingos
alguien tiene algo similar o me puede ayudar.

Gracias de antemano
Lima - Perú


Respuesta Responder a este mensaje
#2 Alejandro Mesa
08/08/2006 - 20:04 | Informe spam
L.Barzi,

Una forma seria usando una tabla [calendario].

Why should I consider using an auxiliary calendar table?
http://www.aspfaq.com/show.asp?id%19

Ejemplo:

CREATE TABLE dbo.Calendar
(
dt SMALLDATETIME NOT NULL
PRIMARY KEY CLUSTERED,

isWeekday BIT,
isHoliday BIT,
Y SMALLINT,
FY SMALLINT,
Q TINYINT,
M TINYINT,
D TINYINT,
DW TINYINT,
monthname VARCHAR(9),
dayname VARCHAR(9),
W TINYINT
)
GO

SET NOCOUNT ON
DECLARE @dt SMALLDATETIME
SET @dt = '20060101'
WHILE @dt < '20080101'
BEGIN
INSERT dbo.Calendar(dt) SELECT @dt
SET @dt = @dt + 1
END
go

UPDATE dbo.Calendar SET

isWeekday = CASE
WHEN DATEPART(DW, dt) IN (1,7)
THEN 0
ELSE 1 END,

isHoliday = 0,

Y = YEAR(dt),

FY = YEAR(dt),

/*

FY = CASE
WHEN MONTH(dt) < 5
THEN YEAR(dt)-1
ELSE YEAR(dt) END,
*/

Q = CASE
WHEN MONTH(dt) <= 3 THEN 1
WHEN MONTH(dt) <= 6 THEN 2
WHEN MONTH(dt) <= 9 THEN 3
ELSE 4 END,

M = MONTH(dt),

D = DAY(dt),

DW = DATEPART(DW, dt),

monthname = DATENAME(MONTH, dt),

dayname = DATENAME(DW, dt),

W = DATEPART(WK, dt)
go

select * from dbo.Calendar
go

declare @d datetime

set @d = '20060808'

select
dt
from
dbo.calendar as c1
where
dt > @d
and dayname not in ('Saturday', 'Sunday')
and (
select
count(*)
from
dbo.calendar as c2
where
c2.dayname not in ('Saturday', 'Sunday')
and c2.dt > @d
and c2.dt <= c1.dt
) = 15
go

drop table dbo.Calendar
go


AMB


"L.Barzi" wrote:

Hola amigos quiero crear un sp que haga lo sgte:

Segun el registro de un pedido (ejemplo se registro hoy) fecha:
08/08/2006 sumarle 15 dias pero sin considerar sabados ni domingos
alguien tiene algo similar o me puede ayudar.

Gracias de antemano
Lima - Perú


Respuesta Responder a este mensaje
#3 Saga
08/08/2006 - 21:01 | Informe spam
Otra idea :-)


CREATE PROCEDURE dbo.ConsigueDiaHabil

@Fecha datetime,
@Dias tinyint,
@Result datetime OUTPUT

AS

declare @CuentaDias int
declare @DiaSem tinyint

set @Result=@Fecha
set @CuentaDias=0
while @CuentaDias<@Dias
begin
set @Result = dateadd(d,1,@Result)
set @DiaSem=datepart(dw,@Result)

if @DiaSem<>1 and @DiaSem<>7
set @CuentaDias=@CuentaDias+1
end
GO



Da de alta el SP, entra a Query Analyzer y prueba asi:

declare @LaFecha datetime
exec ConsigueDiaHabil '2006-08-08',15,@LaFecha output
select @LaFecha

Toma en cuenta que este algoritmo toma en cuenta estrictamente los
fines de semana, Ya si necesitas tomar en cuenta dias festivos, entonces
la solucion que emplea la tabla calendario es la correcta.

Espero te sea util.
Saga
Soluciones Para Mejorar
www.reset.com.mx




"L.Barzi" wrote in message
news:
Hola amigos quiero crear un sp que haga lo sgte:

Segun el registro de un pedido (ejemplo se registro hoy) fecha:
08/08/2006 sumarle 15 dias pero sin considerar sabados ni domingos
alguien tiene algo similar o me puede ayudar.

Gracias de antemano
Lima - Perú
Respuesta Responder a este mensaje
#4 L.Barzi
08/08/2006 - 21:35 | Informe spam
Gracias amigos Isaias, Alejandro Mesa y Saga. Sus respuestas y consejos
fueron muy acertadas mchas gracias.

Saludos
Lima - Perú
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida