Tempo em ano, mês, dia, horas entre 2 datas


   1:  GO
   2:  SET QUOTED_IDENTIFIER ON
   3:  GO
   4:  -- =============================================
   5:  -- Author:        Angelo Carlotto
   6:  -- Create date: 09/04/2012
   7:  -- Description:    
   8:  --    Esta função retorna um texto descrevendo o total de tempo entre duas datas
   9:  --    O usuário pode escolher dentre ano,mes,dia,hora,min e seg quais parcelas deseja que sejam exibidas
  10:  --  Caso o parametro @hasAno=0 e @hasMes=1, caso @ano=2 e @mes=1, neste caso a string retornara será: 25 mes(s) 
  11:  -- =============================================
  12:  ALTER FUNCTION GetStringDescreveTotalTempoEntreDatas
  13:      (
  14:        @dataInicial DATETIME ,
  15:        @dataFinal DATETIME ,
  16:        @hasAno BIT ,
  17:        @hasMes BIT ,
  18:        @hasDia BIT ,
  19:        @hasHora BIT ,
  20:        @hasMinuto BIT ,
  21:        @hasSegundo BIT
  22:      )
  23:  RETURNS VARCHAR(MAX)
  24:  AS 
  25:      BEGIN
  26:          DECLARE @ano INT ,
  27:              @dia INT ,
  28:              @mes INT ,
  29:              @hora INT ,
  30:              @minuto INT ,
  31:              @segundo INT ,
  32:              @retorno VARCHAR(MAX)
  33:   
  34:   
  35:   
  36:      /* Inicializa a variavel de retorno */            
  37:          SET @retorno = ''
  38:   
  39:      /*Calcula quantos ANOS existem dentre a data inicial e afinal*/
  40:          SET @ano = DATEDIFF(YEAR, @dataInicial, @dataFinal)
  41:      /*Caso o usuário deseje que conste o total de ANOS(@hasAnos) e @ano seja maior que zero então...*/
  42:          IF ( @ano > 0
  43:               AND @hasAno = 1
  44:             ) 
  45:              BEGIN
  46:          /*Pega-se o total de ANOS e decrementa-se da dataFinal, gerando uma nova data, agora sem o total de ANOS */
  47:                  SET @dataFinal = DATEADD(YEAR, -1 * @ano, @dataFinal)
  48:          /*Realiza-se a concatenação do texto  contendo o total de ANOS na variavel de retorno*/        
  49:                  SET @retorno = @retorno + ' ' + CAST(@ano AS VARCHAR(2))
  50:                      + ' ano(s)'
  51:              END
  52:   
  53:      /*Calcula quantos MESES existem dentre a data inicial e afinal*/
  54:          SET @mes = DATEDIFF(MONTH, @dataInicial, @dataFinal)        
  55:      /*Caso o usuário deseje que conste o total de MESES(@hasMes) e @mes seja maior que zero então...*/
  56:          IF ( @mes > 0
  57:               AND @hasMes = 1
  58:             ) 
  59:              BEGIN
  60:          /*Pega-se o total de MESES e decrementa-se da dataFinal, gerando uma nova data, agora sem o total de MESES */
  61:                  SET @dataFinal = DATEADD(MONTH, -1 * @mes, @dataFinal)
  62:          /*Realiza-se a concatenação do texto contendo o total de MESES na variavel de retorno*/        
  63:                  SET @retorno = @retorno + ' ' + CONVERT(VARCHAR, @mes)
  64:                      + ' mes(s)'
  65:              END
  66:   
  67:      /*Calcula quantos DIAS existem dentre a data inicial e afinal*/
  68:          SET @dia = DATEDIFF(DAY, @dataInicial, @dataFinal)        
  69:      /*Caso o usuário deseje que conste o total de DIAS(@hasDias) e @dia seja maior que zero então...*/
  70:          IF ( @dia > 0
  71:               AND @hasDia = 1
  72:             ) 
  73:              BEGIN
  74:          /*Pega-se o total de DIAS e decrementa-se da dataFinal, gerando uma nova data, agora sem o total de DIAS */
  75:                  SET @dataFinal = DATEADD(DAY, -1 * @dia, @dataFinal)
  76:          /*Realiza-se a concatenação do texto contendo o total de DIAS na variavel de retorno*/        
  77:                  SET @retorno = @retorno + ' ' + CONVERT(VARCHAR, @dia)
  78:                      + ' dia(s)'
  79:              END
  80:   
  81:      /*Calcula quantos HORAS existem dentre a data inicial e afinal*/
  82:          SET @hora = DATEDIFF(HOUR, @dataInicial, @dataFinal)
  83:      /*Caso o usuário deseje que conste o total de HORAS(@hasHoras) e @horas seja maior que zero então...*/
  84:          IF ( @hora > 0
  85:               AND @hasHora = 1
  86:             ) 
  87:              BEGIN
  88:          /*Pega-se o total de HORAS e decrementa-se da dataFinal, gerando uma nova data, agora sem o total de HORAS */
  89:                  SET @dataFinal = DATEADD(HOUR, -1 * @hora, @dataFinal)
  90:          /*Realiza-se a concatenação do texto contendo o total de HORAS na variavel de retorno*/        
  91:                  SET @retorno = @retorno + ' ' + CONVERT(VARCHAR, @hora)
  92:                      + ' hora(s)'
  93:              END        
  94:   
  95:      /*Calcula quantos MINUTOS existem dentre a data inicial e afinal*/
  96:          SET @minuto = DATEDIFF(MINUTE, @dataInicial, @dataFinal)    
  97:      /*Caso o usuário deseje que conste o total de MINUTOS(@hasMinutos) e @minuto seja maior que zero então...*/
  98:          IF ( @minuto > 0
  99:               AND @hasMinuto = 1
 100:             ) 
 101:              BEGIN
 102:                  SET @dataFinal = DATEADD(MINUTE, -1 * @minuto, @dataFinal)
 103:          /*Realiza-se a concatenação do texto contendo o total de MINUTOS na variavel de retorno*/        
 104:                  SET @retorno = @retorno + ' ' + CONVERT(VARCHAR, @minuto)
 105:                      + ' min(s)'
 106:              END        
 107:   
 108:      /*Calcula quantos SEGUNDOS existem dentre a data inicial e afinal*/    
 109:          SET @segundo = DATEDIFF(SECOND, @dataInicial, @dataFinal)    
 110:      /*Caso o usuário deseje que conste o total de SEGUNDOS(@hasSegundo) e @segundo seja maior que zero então...*/    
 111:          IF ( @segundo > 0
 112:               AND @hasSegundo = 1
 113:             ) 
 114:              BEGIN
 115:                  SET @dataFinal = DATEADD(SECOND, -1 * @segundo, @dataFinal)
 116:          /*Realiza-se a concatenação do texto contendo o total de SEGUNDOS na variavel de retorno*/        
 117:                  SET @retorno = @retorno + ' ' + CONVERT(VARCHAR, @segundo)
 118:                      + ' s(s)'
 119:              END        
 120:   
 121:          RETURN @retorno
 122:   
 123:      END
 124:  GO

Postagens mais visitadas deste blog

Funcão SQL para abreviar nomes

Função em JavaScript para consulta de CEP com retorno em XML ou Json