declare @dt datetime
set @dt = '09-22-2007 15:07:38.850'
select dateadd(mi, datediff(mi, 0, @dt), 0)
select dateadd(hour, datediff(hour, 0, @dt), 0)
戻ります
2007-09-22 15:07:00.000
2007-09-22 15:00:00.000
上記は秒と分を切り捨てて、質問で求められた結果を生成します。 @OMG Poniesが指摘したように、切り上げ/切り下げを行う場合は、それぞれ30分または30分を追加してから、切り捨てることができます。
select dateadd(mi, datediff(mi, 0, dateadd(s, 30, @dt)), 0)
select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)
そして、あなたは得るでしょう:
2007-09-22 15:08:00.000
2007-09-22 15:00:00.000
SQL Server 2008で日付データ型が追加される前は、上記の方法を使用して、日時から時間部分を切り捨てて日付のみを取得していました。問題の日時から特定の時点(0
)までの日数を決定するという考え方です。 、暗黙的に1900-01-01 00:00:00.000
にキャストします ):
declare @days int
set @days = datediff(day, 0, @dt)
次に、その日数を固定時点に追加します。これにより、時刻が00:00:00.000
に設定された元の日付が得られます。 :
select dateadd(day, @days, 0)
以上簡潔に:
select dateadd(day, datediff(day, 0, @dt), 0)
別の日付部分を使用する(例:hour
、mi
)それに応じて機能します。