Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server - Zaokrąglaj wartości TIME do następnej minuty

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

EDYTUJ

Jak wskazano w komentarzu, to nie działa dla czasów od 0 do 1 sekundy. Można temu zaradzić, po prostu zmieniając precyzję w suficie z sekund na milisekundy:

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);

Co daje:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UNION ALL i NOT IN razem

  2. Zaktualizuj SQL z numeracją porządkową

  3. Jak utworzyć indeks nieklastrowy w Create Table?

  4. Jak uruchomić to samo zapytanie we wszystkich bazach danych w instancji?

  5. Zamiana wartości null na zero