Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:arrotonda i valori TIME al minuto successivo

SELECT  DATEADD(MINUTE, CEILING(DATEDIFF(SECOND, 0, CAST(CAST(PA.ORA_INIZIO AS DATETIME) AS TIME)) / 60.0), DATEDIFF(DAY, 0, PA.ORA_INIZIO)) AS BEGIN_TIME_ROUNDED

MODIFICA

Come sottolineato in un commento, questo non riesce per tempi compresi tra 0 e 1 secondo. Questo può essere combattuto semplicemente cambiando la precisione nel soffitto da secondi a millisecondi:

SELECT  PA.ORA_INIZIO,
        DATEADD(MINUTE, 
            CEILING(DATEDIFF(MILLISECOND, 0, CAST(PA.ORA_INIZIO AS TIME)) / 60000.0),
            DATEDIFF(DAY, 0, PA.ORA_INIZIO)) AS BEGIN_TIME_ROUNDED
FROM (VALUES 
        (CONVERT(DATETIME, '20211126 15:59:00.997')), 
        (CONVERT(DATETIME, '20211126 15:59:00.004'))
    ) AS PA (ORA_INIZIO);

Che dà:

ORA_INIZIO BEGIN_TIME_ROUNDED
26-11-2021 15:59:59.997 26-11-2021 16:00:00.000
26-11-2021 15:59:00.003 26-11-2021 16:00:00.000