SQL中的日期函数转换

时间:2017-11-10 04:06:50

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

是否有办法使用TSQL将整数转换为年,月和日

例如365转换为1年0个月零0天 366转换为1年0个月和1天

20转换为0年0个月和20天 200转换为0年13个月和9天 408转换为1年3个月和7天..等等

2 个答案:

答案 0 :(得分:2)

我不知道SQL Server 2008中有任何内置方式,但以下逻辑将为您提供将项目连接在一起所需的所有部分:

select
     n
   , year(dateadd(day,n,0))-1900 y
   , month(dateadd(day,n,0))-1 m
   , day(dateadd(day,n,0))-1 d
from (
    select 365 n union all
    select 366 n union all
    select 20 n union all
    select 200 n union all
    select 408 n
    ) d

| n     | y | m | d  |
|-------|---|---|----|
| 365   | 1 | 0 |  0 |
| 366   | 1 | 0 |  1 |
|  20   | 0 | 0 | 20 |
| 200   | 0 | 6 | 19 |
| 408   | 1 | 1 | 12 |

请注意,DATEDADD函数中使用的零是日期1900-01-01,因此从年计算中扣除1900。

感谢Martin Smith纠正我对闰年的假设。

答案 1 :(得分:1)

如果我们认为所有integer都是30 months,您可以在不使用任何功能的情况下尝试划分days值:

DECLARE @days INT;
SET @days = 365;

SELECT [Years] = @days / 365,
       [Months] = (@days % 365) / 30,
       [Days] = (@days % 365) % 30;

@days = 365

Years   Months  Days
1       0       0

@days = 20

Years   Months  Days
0       0       20