sql >> データベース >  >> RDS >> Sqlserver

T-SQLの日時は、関数を使用して最も近い分と最も近い時間に丸められます

    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)
    

    別の日付部分を使用する(例:hourmi )それに応じて機能します。



    1. PostgreSQLの日付から年を引く

    2. SQLite EXISTS

    3. postgresでISO-8601グレゴリオ暦の日付テーブルを作成する方法

    4. SQL Serverは、MySQLのON DUPLICATEKEYUPDATEのようなものを提供しますか