2012-10-05 34 views
4

我有两个日期:SQL如何检索两个给定日期之间的中间点?

2012-10-04 12:48:56:0002012-10-04 12:48:58:000

预期结果为:
2012-10-04 12:48:57:000


2012-10-04 12:48:56:0002012-10-04 12:48:56:010

预期结果为:
2012-10-04 12:48:56:005

(日期是虚构的,因为SQL Server中的毫秒部分DATETIME数据类型由3增加)

+0

你的意思是你有2日期列,并通过选择要输出的中间点或者是两个日期不同势行? –

回答

7

用自己的日期...

SELECT DATEADD(ms, 
      DATEDIFF(ms,'2012-10-04 12:48:56:000', '2012-10-04 12:48:58:000')/2, 
     '2012-10-04 12:48:56:000') 
+0

任何人都知道如何在时间(6)值postgresql中做到这一点?我很难过,绝望,并从Sql Server将这个确切的代码移植到Postgres。我觉得这个评论可能是适当的,如果有人发现这一点,并在postgres(标题不说sql服务器,这是我怎么结束在这里)和问题得到解答。 http://stackoverflow.com/questions/34711115/postgresql-to-find-midpoint-between-two-timestamps –

-1

试试这个(你可以根据你想如何准确,因此更换日期部分):

DateAdd(ms, DateDiff(ms, date1, date2), date1)/2 
+0

这不可能是正确的。 1. DateAdd函数,2.您需要将差值除以2,然后将其添加到日期1 – Kaf

+0

正确,我的错字 DateAdd(ms,DateDiff(ms,date1,date2),date1)/ 2 – Paddy

+0

Still答案不正确。您需要将datediff函数的输出除以2,然后将其添加到date1 – Kaf

1

事情是这样的:

with sample_data (start_dt, end_dt) as 
( 
    select cast('2012-10-04 12:48:56:000' as datetime), cast('2012-10-04 12:48:58:000' as datetime) 
    union all 
    select cast('2012-10-04 12:48:56:000' as datetime), cast('2012-10-04 12:48:56:010' as datetime) 
) 
select start_dt, end_dt, dateadd(millisecond, datediff(millisecond, start_dt, end_dt)/2, start_dt) 
from sample_data 

虽然第二对计算不正确。可能是因为3毫秒的分辨率。

1
declare @date1 datetime; 
declare @date2 datetime; 

set @date1 = '2012-10-04 12:48:56:000'; 
set @date2 = '2012-10-04 12:48:58:000'; 

select DateAdd(ms, DateDiff(ms, @date1, @date2)/2, @date1) 
0
-- let's day d1 and d2 are DateTime variables (d1 < d2) 

-- get the differnce in milliseconds 
-- (you can change it but be careful with oveflow situations) 
declare @diff integer = datediff (ms, @d1, @d2) 
-- the middle is the first date + half of the difference 
declare @middle DateTime = dateadd (ms, @diff/2, @d1) 
相关问题