我想找到两个日期列之间的持续时间。为此,我使用DATEDIFF函数分别查找数字年份和月份,但希望两个结果都在单列中。 下面给出了两列。
start_dt | end_dt
06-Oct-2009 15-Jul-2011
需要的结果
Duration(years.months)
2.3
答案 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);
}