En SQL Server 2008, me gustaría que la columna de fecha y hora se redondee a la hora y al minuto más cercanos, preferiblemente con las funciones existentes en 2008.
Para este valor de columna 2007-09-22 15:07:38.850
, la salida se verá así:
2007-09-22 15:08 -- nearest minute
2007-09-22 15 -- nearest hour
sql
sql-server
tsql
sql-server-2008
user219628
fuente
fuente
Respuestas:
volverá
Lo anterior solo trunca los segundos y minutos, produciendo los resultados solicitados en la pregunta. Como señaló @OMG Ponies, si desea redondear hacia arriba / hacia abajo, puede agregar medio minuto o media hora respectivamente, luego truncar:
y obtendrás:
Antes de que se agregara el tipo de datos de fecha en SQL Server 2008, usaría el método anterior para truncar la parte de tiempo de una fecha y hora para obtener solo la fecha. La idea es determinar el número de días entre la fecha y hora en cuestión y un punto fijo en el tiempo (
0
que implícitamente se convierte en1900-01-01 00:00:00.000
):y luego agregue esa cantidad de días al punto fijo en el tiempo, lo que le da la fecha original con la hora establecida en
00:00:00.000
:o más sucintamente:
El uso de una parte de fecha diferente (por ejemplo
hour
,mi
) funcionará en consecuencia.fuente
datetimeoffset
, tuve que sustituir0
conTODATETIMEOFFSET('1900-01-01 00:00:00', 0)
para evitar forzar la zona horaria local en el resultado."Redondeado" hacia abajo como en su ejemplo. Esto devolverá un valor varchar de la fecha.
fuente
CONVERT(datetime, CONVERT(VARCHAR(13), @date, 120)+':00:00')
Me doy cuenta de que esta pregunta es antigua y hay una respuesta alternativa y aceptada. También me doy cuenta de que mi respuesta solo responderá la mitad de la pregunta, pero para cualquiera que quiera redondear al minuto más cercano y aún tener un valor compatible con fecha y hora usando solo una función :
Durante horas o segundos, use la respuesta de Jeff Ogata (la respuesta aceptada) anterior.
fuente
smalldatetime
se agregó en SQL 2008.Select convert(char(8), DATEADD(MINUTE, DATEDIFF(MINUTE, 0, getdate), 0), 108) as Time
redondeará los segundos a 00
fuente