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 '