Incrementar intervalo de datas

30/11/2012

0

Boa noite a todos,

Sou novo no site e estou com a seguinte situação, tenho uma tabela chamada AFASTAMENTOS (FUNC, DATAI, DATAF) EX: SELECT * FROM AFASTAMENTOS RESULTADO:

FUNC / DATAI / DATAF
000005, 20120808, 20120810
000056, 20120804, 20120807

Estou precisando preencher o intervalo de datas conforme o segue abaixo:

FUNC / DATAI / DATAF
000005, 20120808, 20120810
000005, 20120809, 20120810
000005, 20120810, 20120810
000056, 20120804, 20120807
000056, 20120805, 20120807
000056, 20120806, 20120807
000056, 20120807, 20120807

SEGUE TQUERY ABAIXO:

DECLARE C_CODIGO CURSOR
LOCAL
FAST_FORWARD
FOR SELECT FUNC FROM AFASTAMENTOS

DECLARE @FUNC VARCHAR (12)
DECLARE @CONTADOR INT
DECLARE @CONT INT
DECLARE @DATA DATETIME
DECLARE @DATAI DATETIME
DECLARE @DATAF DATETIME

OPEN C_CODIGO
-- EXIBIR 5 LINHAS DA CONSULTA
SET @CONTADOR = 1
WHILE @CONTADOR <= 1--(SELECT COUNT(FUNC )FROM AFASTAMENTOS)
BEGIN
FETCH C_CODIGO INTO @FUNC
SET @CONTADOR = @CONTADOR + 1
BEGIN
SET @DATAI = (SELECT DATAI FROM AFASTAMENTOS WITH (NOLOCK) where FUNC=@FUNC)
SET @DATAF = (SELECT DATAF FROM AFASTAMENTOS WITH (NOLOCK) where FUNC=@FUNC)
WHILE @DATAI <= @DATAF

INSERT INTO AFASTAMENTO (FUNC, DATA)
SELECT
@FUNC,
@DATAI
SET @DATAI = @DATAI + 1
END
END

CLOSE C_CODIGO
DEALLOCATE C_CODIGO

COMO RESOLVER ?

DESDE JÁ AGRADEÇO


Fábio Vieira

Fábio Vieira

Responder

Posts

30/11/2012

Alex Lekao

Ola Boa tarde!!!

Desculpe mas eu nao consegui entender muito bem o seu codigo.

Vc criou um cursor para fazer o registro dia a dia do afastamento? vc precisa realmente que apareca dia a dia?

eu recomendaria vc usar o Datediff que ele vai mostrar a diferenca entre as duas datas, ficaria mais leve e rapido o codigo e acredito que atingiria o mesmo objetico(embora eu nao saiba o objetivo exato... rsrs).

Espero ter ajudado.

Abraco.

Alex - Lekao
Responder

01/12/2012

Daniel Costa

O incremento da data pode ser feito assim

set @DATAI = convert(varchar,dateadd(d,1,convert(datetime,@DATAI,112)),112)


Mas usar DateDiff realmente seria melhor
Responder

04/12/2012

Fábio Vieira

Preciso preencher as data da inicio ao fim exemplo: matricula = 000254, dataini = '20121001', datafim = '20121003',
preciso do seguinte resultado
matricula = 000254, data = '20121001'
matricula = 000254, data = '20121002'
matricula = 000254, data = '20121003'

Consegui da seguinte forma:

DECLARE C_CODIGO CURSOR
LOCAL
FAST_FORWARD
FOR SELECT FUNC FROM AFASTAMENTOS

DECLARE @FUNC VARCHAR (12)
DECLARE @CONTADOR INT
DECLARE @CONT INT
DECLARE @DATA DATETIME
DECLARE @DATAI DATETIME
DECLARE @DATAF DATETIME

OPEN C_CODIGO
-- EXIBIR 5 LINHAS DA CONSULTA
SET @CONTADOR = 1
FETCH C_CODIGO INTO @FUNC
WHILE @CONTADOR <= 1--(SELECT COUNT(FUNC )FROM AFASTAMENTOS)
BEGIN
--
--FETCH C_CODIGO INTO @FUNC

SET @CONTADOR = @CONTADOR + 1
BEGIN
SET @DATAI = (SELECT DATAI FROM AFASTAMENTOS WITH (NOLOCK) where FUNC=@FUNC)
WHILE @DATAI <= (SELECT DATAF FROM AFASTAMENTOS WITH (NOLOCK) where FUNC=@FUNC)
BEGIN
SET @DATA = @DATAI + 1
END
BEGIN
INSERT INTO AFASTAMENTO (FUNC, DATA)
SELECT @FUNC, @DATA
END
END
END

CLOSE C_CODIGO
DEALLOCATE C_CODIGO

--SELECT * FROM AFASTAMENTO
Responder

05/12/2012

Alex Lekao

Ola Bom dia!!!

Se resolveu o problema, maravilha!!!

Acredito que tbm conseguiria resolver com CTE ou alguma View, talvez ate ficasse um pouco mais rapido.

Mas no caso o importante eh atender a necessidade depois ve possibilidade de ajustes nao eh verdade? rsrsr

Bom $UCE$$O para vc.

Abraco.

Alex - Lekao
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar