Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Willian Candido

[Resolvido] Calculo de Datas

Recommended Posts

Olá, gostaria de saber como faço para fazer o calculo de data no exemplo abaixo via query do SQL Server:

 

Data inicial: 01/05/2010

Data final: 10/06/2012

 

Resultado: 2 anos, 1 mês e 10 dia.

 

Tentei usar o DATEDIFF, mas ele me fornece dia, mês e ano separados e não agrupados como no meu exemplo.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian, eu fiz uma função aqui que acho que vai de ajudar:

 

CREATE FUNCTION DBO.FN_DATEDIFF(@INI AS DATETIME, @FIM AS DATETIME) 
RETURNS @TABLE TABLE(DIAS INT, MESES INT, ANOS INT) AS
BEGIN

DECLARE	@DIA_DIFF AS DECIMAL(10,2)
DECLARE	@MES_DIFF AS DECIMAL(10,2)

DECLARE	@DIA AS DECIMAL(10,2)
DECLARE	@MES AS DECIMAL(10,2)
DECLARE	@ANO AS DECIMAL(10,2)

SET	@DIA_DIFF = DATEDIFF(DAY, @INI, @FIM)
SET	@MES_DIFF = DATEDIFF(MONTH, @INI, @FIM)

SET @DIA = FLOOR(@DIA_DIFF%365.25)-FLOOR(365.25/12)*FLOOR(@MES_DIFF%12)
SET @MES = FLOOR(@MES_DIFF%12)
SET @ANO = DATEDIFF(YEAR, @INI, @FIM)

INSERT INTO @TABLE (DIAS, MESES, ANOS) VALUES (@DIA, @MES, @ANO)

RETURN

END	

 

e para utilizar:

 

SELECT * FROM DBO.FN_DATEDIFF('2010-05-01', '2012-06-10')

 

Espero que te ajude.

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, a solução que achei foi:

 

DECLARE @s DATE, @e DATE

SELECT @s = '20100101', @e = '20121021';

SELECT y + ' year(s), ' + m + ' month(s) and ' + d + ' day(s).'
FROM
(
SELECT 
RTRIM(y), 
RTRIM(m - CASE WHEN pd < 0 THEN 1 ELSE 0 END),
RTRIM(CASE WHEN pd < 0 THEN nd ELSE pd END)
FROM 
(
SELECT
DATEDIFF(MONTH, @s, @e) / 12, 
DATEDIFF(MONTH, @s, @e) % 12,
DATEDIFF(DAY, @s, DATEADD(MONTH, -DATEDIFF(MONTH, @s, @e), @e)),
DATEDIFF(DAY, @s, DATEADD(MONTH, 1-DATEDIFF(MONTH, @s, @e), @e))
) AS x (y, m, pd, nd)
) AS y (y, m, d);

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.