Dans SQL Server 2008, je voudrais obtenir la colonne datetime arrondie à l'heure la plus proche et à la minute la plus proche de préférence avec les fonctions existantes en 2008.
Pour cette valeur de colonne 2007-09-22 15:07:38.850
, la sortie ressemblera à ceci :
2007-09-22 15:08 -- nearest minute
2007-09-22 15 -- nearest hour
sql
sql-server
tsql
sql-server-2008
user219628
la source
la source
Réponses:
reviendra
Ce qui précède ne fait que tronquer les secondes et les minutes, produisant les résultats demandés dans la question. Comme @OMG Ponies l'a souligné, si vous voulez arrondir vers le haut / bas, vous pouvez ajouter respectivement une demi-minute ou une demi-heure, puis tronquer:
et vous obtiendrez:
Avant l' ajout du type de données de date dans SQL Server 2008, j'utiliserais la méthode ci-dessus pour tronquer la partie temporelle d'une date / heure pour obtenir uniquement la date. L'idée est de déterminer le nombre de jours entre la date et l'heure en question et un point fixe dans le temps (
0
, qui se convertit implicitement en1900-01-01 00:00:00.000
):puis ajoutez ce nombre de jours au point fixe dans le temps, ce qui vous donne la date d'origine avec l'heure définie sur
00:00:00.000
:ou plus succinctement:
L'utilisation d'une autre datepart (par exemple
hour
,mi
) fonctionnera en conséquence.la source
datetimeoffset
, j'ai dû remplacer0
parTODATETIMEOFFSET('1900-01-01 00:00:00', 0)
pour éviter de forcer le fuseau horaire local sur le résultat."Arrondi" comme dans votre exemple. Cela renverra une valeur varchar de la date.
la source
CONVERT(datetime, CONVERT(VARCHAR(13), @date, 120)+':00:00')
Je me rends compte que cette question est ancienne et qu'il existe une réponse acceptée et alternative. Je me rends également compte que ma réponse ne répondra qu'à la moitié de la question, mais pour quiconque souhaite arrondir à la minute la plus proche et avoir toujours une valeur compatible datetime en utilisant une seule fonction :
Pendant des heures ou des secondes, utilisez la réponse de Jeff Ogata (la réponse acceptée) ci-dessus.
la source
smalldatetime
été ajoutée dans SQL 2008.Select convert(char(8), DATEADD(MINUTE, DATEDIFF(MINUTE, 0, getdate), 0), 108) as Time
arrondira les secondes à 00
la source