如何查找两个日期之间的持续时间

时间:2012-10-08 04:47:23

标签: sql tsql date sql-server-2008-r2

我想找到两个日期列之间的持续时间。为此,我使用DATEDIFF函数分别查找数字年份和月份,但希望两个结果都在单列中。 下面给出了两列。

start_dt      |    end_dt
06-Oct-2009      15-Jul-2011  

需要的结果

Duration(years.months)
2.3

7 个答案:

答案 0 :(得分:7)

我认为没有开箱即用的API来提供您提到的格式的结果。您需要使用DATEDIFF函数来获得所需的最小面额差异,然后将结果除以适当的值,以获得所需格式的持续时间。像这样:

DECLARE @start DATETIME
DECLARE @end DATETIME
DECLARE @duration INT

SELECT @start = '2009-10-06', @end = '2011-07-15'
SELECT @duration = DATEDIFF(mm, @start, @end)
SELECT CONVERT(NVARCHAR, @duration / 12) + '.' + CONVERT(NVARCHAR, @duration % 12)

通过编写一个采用日期和最小面额的函数并以所需格式返回持续时间可以更好地实现这一点,因为它需要TSQL并且纯SQL不够。

答案 1 :(得分:2)

尝试这样的事情

SELECT
    DATEDIFF( mm, start_dt, end_dt) / 12 AS years
    , DATEDIFF( mm, start_dt, end_dt) % 12 AS months

答案 2 :(得分:1)

QUERY:

SELECT 
    CONVERT(VARCHAR, DATEADD(month, 1, GETDATE()), 103) AS FinalDay,
    CONVERT(VARCHAR, HRM_EmpGenDtls.DOJ, 106) AS DOJ,
    CONVERT(varchar, DATEDIFF(year, HRM_EmpGenDtls.DOJ, GETDATE())) + ' Years' + ' ' +                      
    CONVERT(varchar, DATEDIFF(month, HRM_EmpGenDtls.DOJ, GETDATE()) - (datediff(year, HRM_EmpGenDtls.DOJ, GETDATE()) * 12)) + ' Months' + ' ' +      CONVERT(varchar, datepart(d,GETDATE()) - datepart(d, HRM_EmpGenDtls.DOJ)) + ' Days' AS ServicePeriod   
FROM HRM_EmpGenDtls 

这给出了以下答案:

FinalDay    DOJ ServicePeriod

10/10/2013  03 Sep 2012 1 Years 0 Months 7 Days
10/10/2013  01 Jan 2000 13 Years 8 Months 9 Days
10/10/2013  22 Aug 2000 13 Years 1 Months -12 Days
10/10/2013  22 Aug 2000 13 Years 1 Months -12 Days
10/10/2013  22 Aug 2000 13 Years 1 Months -12 Days
10/10/2013  22 Aug 2000 13 Years 1 Months -12 Days
10/10/2013  22 Aug 2000 13 Years 1 Months -12 Days
10/10/2013  04 Sep 2012 1 Years 0 Months 6 Days

答案 3 :(得分:0)

SELECT (DATEDIFF(month, start_dt, end_dt) / 12);

答案 4 :(得分:0)

试试这个。这可能会有所帮助

select cast (DATEDIFF(m,'06-Oct-2009','15-Jul-2011')/12 as varchar(25)) + '.' + cast (DATEDIFF(m,'06-Oct-2009','15-Jul-2011')%12 as varchar(25))

答案 5 :(得分:0)

我试过这个 -

    SELECT
      CONVERT(varchar,DATEDIFF(MONTH,SAKUSEITIME,KOSHINTIME)/12)+'.'
      +CONVERT(varchar,DATEDIFF(MONTH,SAKUSEITIME,KOSHINTIME)%12) Duration
    FROM MYTABLE

答案 6 :(得分:0)

VkResult Result = vkCreateInstance( info, NULL, instance );
if(Result != VK_SUCCESS)
{
    glfwTerminate();

    exit(EXIT_FAILURE);
}