6

私には2つの日付があります:

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 サーバーでは、ミリ秒部分の DATETIME データ型が 3 ずつ増加しているためです)

4

6 に答える 6

8

あなただけのデートで…

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')
于 2012-10-05T11:40:18.007 に答える
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

2番目のペアは正しく計算されませんが。おそらく3ミリ秒の解像度のためです。

于 2012-10-05T11:46:19.747 に答える
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)
于 2012-10-05T11:46:33.297 に答える
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)
于 2012-10-05T11:48:37.443 に答える
-1

これを試してください(どれだけ正確にしたいかによって、日付部分を置き換えることができます):

DateAdd(ms, DateDiff(ms, date1, date2), date1)/2
于 2012-10-05T11:38:42.053 に答える