sql查询日期时间问题
如表test:abcde12008-1-117:202008-1-218:1022008-2-117:302008-2-314:2032008-6-217:102008-...
如表test:
a b c d e
1 2008-1-1 17:20 2008-1-2 18:10
2 2008-2-1 17:30 2008-2-3 14:20
3 2008-6-2 17:10 2008-6-3 15:30
4 2008-2-2 17:00 2008-2-4 14:30
根据组合(B与C) ,(D与E )两时间差计算 ,例如第一条 2008-1-1 17:20与 2008-1-2 18:10 这两个时差计算,精确到半小时,不足半小时按小时计算!
例1:13:20 到 14:50 ,相差时间为1.5小时
例2: 12:50 到17:00 ,相差时间约为4.16小时 ,但显示为4.5小时!
例3: 13:10到 14:50 ,相差时间约为1.67小时,但显示为2.0小时!
请问大神们该怎么做啊 展开
a b c d e
1 2008-1-1 17:20 2008-1-2 18:10
2 2008-2-1 17:30 2008-2-3 14:20
3 2008-6-2 17:10 2008-6-3 15:30
4 2008-2-2 17:00 2008-2-4 14:30
根据组合(B与C) ,(D与E )两时间差计算 ,例如第一条 2008-1-1 17:20与 2008-1-2 18:10 这两个时差计算,精确到半小时,不足半小时按小时计算!
例1:13:20 到 14:50 ,相差时间为1.5小时
例2: 12:50 到17:00 ,相差时间约为4.16小时 ,但显示为4.5小时!
例3: 13:10到 14:50 ,相差时间约为1.67小时,但显示为2.0小时!
请问大神们该怎么做啊 展开
6个回答
展开全部
应该是这样写的吧:
SELECT CASE WHEN W.[Time2] = 0 THEN W.[Time1]
WHEN W.[Time2] > 0 AND W.[Time2] <= 0.5 THEN W.[Time1] + 0.5
ELSE W.[Time1] + 1 END AS [Time]
FROM (
SELECT CAST(CAST(DATEDIFF(minute, W.[Date1], W.[Date2]) AS DECIMAL(18, 2))/60 AS INT) AS [Time1]
,CAST(DATEDIFF(minute, W.[Date1], W.[Date2]) AS DECIMAL(18, 2))/60 - CAST(CAST(DATEDIFF(minute, W.[Date1], W.[Date2]) AS DECIMAL(18, 2))/60 AS INT) AS [Time2]
FROM (
SELECT CAST(b + ' ' + c AS DATETIME) AS [Date1]
,CAST(d + ' ' + e AS DATETIME) AS [Date2]
) W
) W
由于时间匆忙,我没有测试,请验证!
SELECT CASE WHEN W.[Time2] = 0 THEN W.[Time1]
WHEN W.[Time2] > 0 AND W.[Time2] <= 0.5 THEN W.[Time1] + 0.5
ELSE W.[Time1] + 1 END AS [Time]
FROM (
SELECT CAST(CAST(DATEDIFF(minute, W.[Date1], W.[Date2]) AS DECIMAL(18, 2))/60 AS INT) AS [Time1]
,CAST(DATEDIFF(minute, W.[Date1], W.[Date2]) AS DECIMAL(18, 2))/60 - CAST(CAST(DATEDIFF(minute, W.[Date1], W.[Date2]) AS DECIMAL(18, 2))/60 AS INT) AS [Time2]
FROM (
SELECT CAST(b + ' ' + c AS DATETIME) AS [Date1]
,CAST(d + ' ' + e AS DATETIME) AS [Date2]
) W
) W
由于时间匆忙,我没有测试,请验证!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
--楼主可以分为两步骤:
--第一步先把差额算出了
with tbname as
(select a,b+c,d+e de from test)
select a,datediff(mi,bc,de)/60.0 hs into #temp from tbname
--第二步 再判断
if (select right(hs,1) from #temp)>5
begin
update #temp set hs=round(hs,0) where right(hs,1)>5
end
else if (select right(hs,1) from #temp)<=5 and (select right(hs,1) from #temp)>0
begin
update #temp set hs=left(hs,len(hs)-2)+0.5 where right(hs,1)<=5 and right(hs,1)>0
end
--不明白可以随时问我 希望采纳 脚本一起执行 最后可以执行下面语句查看
select * from #temp
--第一步先把差额算出了
with tbname as
(select a,b+c,d+e de from test)
select a,datediff(mi,bc,de)/60.0 hs into #temp from tbname
--第二步 再判断
if (select right(hs,1) from #temp)>5
begin
update #temp set hs=round(hs,0) where right(hs,1)>5
end
else if (select right(hs,1) from #temp)<=5 and (select right(hs,1) from #temp)>0
begin
update #temp set hs=left(hs,len(hs)-2)+0.5 where right(hs,1)<=5 and right(hs,1)>0
end
--不明白可以随时问我 希望采纳 脚本一起执行 最后可以执行下面语句查看
select * from #temp
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select *,FLOOR(datediff(MINUTE,b+' '+c,d+' '+e)/60.0+0.5) from T
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主,你好!在回答你的问题之前,我想确定一些信息。句子“精确到半小时,不足半小时按小时计算”这句话怎么来理解?
更多追问追答
追问
例如17:10 那么显示就是17:30
17:40 那么现实就是18:00
追答
按你的话来理解,不足半小时按小时算,那么17:10就应该算成18:00
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(向下取整(时差 + 0.5))-0.5
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询