Ir para conteúdo
Fórum Script Brasil
  • 0

Intervalo entre datas por extenso


jothaz

Pergunta

O fragmento a seguir mostra uma forma de como através de um CURSOR escrever por extenso um intervalo entre datas.

Script:

DECLARE  @TAB TABLE (DATAI DATETIME, DATAF DATETIME, INTERVALO_DATA_EXTENSO VARCHAR(100))
INSERT INTO @TAB (DATAI, DATAF) VALUES ('2003/07/05 10:00','2003/08/07 15:30')
INSERT INTO @TAB (DATAI, DATAF) VALUES ('2003/07/05 10:00','2003/09/07 15:30')
INSERT INTO @TAB (DATAI, DATAF) VALUES ('2003/07/05 10:00','2003/09/07 16:00')
INSERT INTO @TAB (DATAI, DATAF) VALUES ('2003/07/05 10:00','2004/09/07 16:00')

DECLARE @SAIDA VARCHAR(2000), @DATAI DATETIME, @DATAF DATETIME
DECLARE @MES INT, @DIA INT, @DIAT INT, @HORA INT, @MIN INT, @AUX VARCHAR(100)

DECLARE MYCURSOR CURSOR FOR 
SELECT * FROM @TAB
OPEN MYCURSOR
FETCH NEXT FROM MYCURSOR
INTO @DATAI, @DATAF, @AUX
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SAIDA = ''
    SET @MES     = DATEDIFF(MM,@DATAI,@DATAF) 
    SET @DIAT     = DATEDIFF(D,@DATAI,@DATAF)
    SET @HORA     = DATEDIFF(HH,@DATAI,@DATAF) 
    SET @MIN     = DATEDIFF(MI,@DATAI,@DATAF)
    SET     @MIN = @MIN % 60
    SET     @DIA     = @DIAT - (@MES * 30) - 1
    SET      @HORA     = (@HORA - (@DIAT * 24)) 

    SET @AUX  = STR(@MES,2) + ' MES(ES)  ' +  STR(@DIA,2) + ' DIA(S)   ' + STR(@HORA,2) + '  HORA(S)  ' + STR( @MIN,2)  +  ' MINUTO(S)' 

    UPDATE @TAB SET INTERVALO_DATA_EXTENSO = @AUX

    --PRINT     @AUX

    FETCH NEXT FROM MYCURSOR
    INTO @DATAI, @DATAF, @AUX
END
CLOSE MYCURSOR
DEALLOCATE MYCURSOR


SELECT INTERVALO_DATA_EXTENSO, DATAI, DATAF FROM @TAB

GO
Resultado:
INTERVALO_DATA_EXTENSO            DATAI            DATAF                                                  
-------------------------------------------------- ------------------------ -----------------------
14 MES(ES)   9 DIA(S)    6  HORA(S)   0 MINUTO(S)  2003-07-05 10:00:00.000  2003-08-07 15:30:00.000
14 MES(ES)   9 DIA(S)    6  HORA(S)   0 MINUTO(S)  2003-07-05 10:00:00.000  2003-09-07 15:30:00.000
14 MES(ES)   9 DIA(S)    6  HORA(S)   0 MINUTO(S)  2003-07-05 10:00:00.000  2003-09-07 16:00:00.000
14 MES(ES)   9 DIA(S)    6  HORA(S)   0 MINUTO(S)  2003-07-05 10:00:00.000  2004-09-07 16:00:00.000

(4 row(s) affected)

Considerações finais:

Não sei se é útil, porém talvez valha pela curiosidade.

O que foi demonstrado acima pode ser executado através de uma função (function), porém acreditem algumas versões de alguns bancos de dados proprietárias não disponibiliza uso de funções.

E lembrem-se estes exemplos não passam de elocubrações.

Fonte/Autor/link

AUTOR: "Jothaz"

Dúvidas, criticas, contribuições, correções e adições serão bem vindas.

Editado por jothaz
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...