是否有办法使用TSQL将整数转换为年,月和日
例如365转换为1年0个月零0天 366转换为1年0个月和1天
20转换为0年0个月和20天 200转换为0年13个月和9天 408转换为1年3个月和7天..等等
答案 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