将年数转换为dateName?

时间:2018-10-22 22:30:16

标签: sql sql-server

因此,我正在计算以年为单位的datediff,并获得一个数值(例如:16.166666)。将其转换为日期名称的最佳解决方案是什么。

例如16.166年将变成:16年零1个月?

2 个答案:

答案 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.';