因此,我正在计算以年为单位的datediff,并获得一个数值(例如:16.166666)。将其转换为日期名称的最佳解决方案是什么。
例如16.166年将变成:16年零1个月?
答案 0 :(得分:2)
示例
Declare @Value float= 16.166
Select Years = floor(@Value)
,Months = floor((@Value - floor(@Value)) * 12)
,OrAsStr = ltrim(
replace(
replace(
concat(' ',floor(@Value),' Years ',floor((@Value - floor(@Value)) * 12),' Months')
,' 1 Years ',' 1 Year ')
,' 1 Months',' 1 Month')
)
返回
Years Months OrAsStr
16 1 16 Years 1 Month
答案 1 :(得分:1)
根据您的评论
我有两个日期列,需要查找日期差,然后转换为字符串:例如:16年零1个月。
你可以喜欢
"In this table we can see that data contain 32 rows"
OR
DECLARE
@Start DATE = '2000-01-01',
@End DATE = '2016-02-01';
SELECT CAST(T.Years AS VARCHAR(10)) + ' Years and ' +
CAST(DATEDIFF(Month, @Start, DATEADD(Year, - T.Years, @End)) AS VARCHAR(2)) + ' Months.'
FROM
(
SELECT DATEDIFF(Year, @Start, @End) Years
) T;
返回
SELECT CAST(DATEDIFF(Year, @Start, @End) AS VARCHAR(10)) +
' Years and ' +
CAST(
DATEDIFF(
Month,
@Start,
DATEADD(Year, - DATEDIFF(Year, @Start, @End),
@End
)
) AS VARCHAR(2)) + ' Months.';