sql >> Databasteknik >  >> RDS >> Sqlserver

T-SQL:Avrunda till närmaste 15 minuters intervall

Jag använder för närvarande en dateadd / datediff-variant med ett noll (0) datum för detta. Ingen casting krävs:

select dateadd(minute, datediff(minute,0,GETDATE()) / 15 * 15, 0)

GETDATE() är oavsett din datumtid.

Detta kommer att fungera för datum åtminstone upp till år 5500 innan datediff misslyckas på grund av ett spill. Men om du försöker använda andra noggrannhet, kommer ovanstående att misslyckas direkt.

Att använda ett annat fast datum, som "2009-01-01", eller dagens datum (varning, fulare SQL) kommer att fixa det. Ett framtida datum kommer också att fungera. Så länge den har en tidsdel på 00:00:00 kan du basera en annan datumtid på den.

till exempel:avrunda till närmaste 30 sekunder:

select dateadd(second, round(datediff(second, '2010-01-01', GETDATE()) / 30.0, 0) * 30, '2010-01-01');


  1. Hur hanterar man ett valfritt värde som returneras av en fråga med postgres-lådan?

  2. Dynamisk SQL vs lagrad procedur

  3. group_concat och hur man använder radnummer i sqlite

  4. Ingen lämplig drivrutin hittades för jdbc:postgresql://192.168.1.8:5432/NexentaSearch