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

T-SQL:Afrund til nærmeste 15 minutters interval

Jeg bruger i øjeblikket en dateadd / datediff variant med en nul (0) dato til dette. Ingen casting påkrævet:

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

GETDATE() er hvad end dit datetime er.

Dette vil virke for datoer mindst op til år 5500, før datediff fejler på grund af et overløb. Men hvis du prøver at bruge anden nøjagtighed, vil ovenstående mislykkes med det samme.

Brug af en anden fast dato, såsom '2009-01-01' eller dagens dato (advarsel, mere grim SQL) vil løse det. En fremtidig dato vil også fungere. Så længe den har en tidsdel på 00:00:00, kan du basere en anden dato og klokkeslæt på den.

for eksempel:afrund til nærmeste 30 sekunder:

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


  1. Begrænsning af returneret post fra SQL-forespørgsel i Oracle

  2. Indkaldelse af papirer til PGDay.IT 2011 er blevet forlænget

  3. SQL 'AND' eller 'OR' kommer først?

  4. Brug PARSENAME() til at returnere en del af et objektnavn i SQL Server