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