Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算每行的持续时间(以年、月和日为单位)_Sql_Sql Server_Sql Server 2008_Date - Fatal编程技术网

Sql 计算每行的持续时间(以年、月和日为单位)

Sql 计算每行的持续时间(以年、月和日为单位),sql,sql-server,sql-server-2008,date,Sql,Sql Server,Sql Server 2008,Date,我有一个表,我在其中存储玩家在任何带有gameId和UserId的游戏中进入的日期 现在我必须计算每个用户玩游戏以来的时间 表架构如下所示 create table GameUser ( UserId int identity(1,1) not null, UserName nvarchar(500) ) insert into GameUser SELECT 'rahul' insert into GameUser SELECT 'yunus' insert into G

我有一个表,我在其中存储玩家在任何带有
gameId和UserId
的游戏中进入的日期

现在我必须计算每个用户玩游戏以来的时间

表架构如下所示

create table  GameUser

(
   UserId int identity(1,1) not null, 
   UserName nvarchar(500)

)

insert into GameUser SELECT 'rahul'
insert into GameUser SELECT 'yunus'
insert into GameUser SELECT 'nitin'


Create table GameEntry 
 (
    EntryId int identity(1,1) not null,
    GameId int , 
    UserId int , 
    EntryDate smalldatetime

 )


insert into GameEntry SELECT 1,1,'01/01/2009'
insert into GameEntry SELECT 1,2,'05/01/2009'
insert into GameEntry SELECT 1,3,'12/01/2009'
insert into GameEntry SELECT 2,1,'01/01/2010'
insert into GameEntry SELECT 2,3,'01/01/2013'

我的持续时间结果列应该是这样的
2年2个月15天
3个月
5个月15天
9天

我已经检查了年龄计算问题,但还有更复杂的问题


你可以这样做。将以年、月和日为单位返回日期


您可以这样做:

Declare @DOB DateTime
DECLARE @yy INT
DECLARE @mm INT
DECLARE @getdd INT
DECLARE @dd INT

SET @DOB='2011-10-11 00:00:00.000'

SET @yy = DATEDIFF(mm, @DOB, GETDATE())/12
SET @mm = DATEDIFF(mm, @DOB, GETDATE())%12 - 1
SET @dd = ABS(DATEDIFF(dd, DATEADD(mm,@mm , DATEADD(yy, @yy, @DOB)), GETDATE()))

SELECT Convert(varchar(10),@yy) + ' Years ' + Convert(varchar(10),@mm) + ' Months '  + Convert(varchar(10),@dd) + ' Days '

2年2个月15天或3个月或5个月15天或9天你在我的问题中检查过这个吗?哦,好吧……考虑到你问题的主题,我认为这就是你想要的。使用
datediff(day,EntryDate,getdate())
获得天数的差异。在那之后,你只需要做计算和格式化的工作。当我手工计算时,30天、31天或28天怎么样?因为我的出生日期是1986年1月1日,所以我今天27岁2个月零3天。Thanks@rahularyansharma:我有两个以上链接的场景:1.今天的日期:2013年3月27日和2013年2月28日。答案是:0年,0个月,30天。2.今天的日期:2013年3月27日和2012年2月28日。答案是:1年零个月零30天。在闰年的额外一天,计算未命中。你想让它以同样的方式吗?不,我不想那样,我想计算准确的年、月、日。@rahularyansharma:可能的重复:和
Declare @DOB DateTime
DECLARE @yy INT
DECLARE @mm INT
DECLARE @getdd INT
DECLARE @dd INT

SET @DOB='2011-10-11 00:00:00.000'

SET @yy = DATEDIFF(mm, @DOB, GETDATE())/12
SET @mm = DATEDIFF(mm, @DOB, GETDATE())%12 - 1
SET @dd = ABS(DATEDIFF(dd, DATEADD(mm,@mm , DATEADD(yy, @yy, @DOB)), GETDATE()))

SELECT Convert(varchar(10),@yy) + ' Years ' + Convert(varchar(10),@mm) + ' Months '  + Convert(varchar(10),@dd) + ' Days '