No SQL server 2008, gostaria que a coluna datetime fosse arredondada para a hora e o minuto mais próximos, de preferência com as funções existentes em 2008.
Para este valor de coluna 2007-09-22 15:07:38.850
, a saída será semelhante a:
2007-09-22 15:08 -- nearest minute
2007-09-22 15 -- nearest hour
sql
sql-server
tsql
sql-server-2008
user219628
fonte
fonte
Respostas:
retornará
O anterior apenas trunca os segundos e minutos, produzindo os resultados solicitados na pergunta. Como @OMG Ponies apontou, se você quiser arredondar para cima / para baixo, pode adicionar meio minuto ou meia hora respectivamente e, em seguida, truncar:
e você obterá:
Antes de o tipo de dados de data ser adicionado ao SQL Server 2008, eu usaria o método acima para truncar a parte do tempo de uma data e hora para obter apenas a data. A ideia é determinar o número de dias entre a data e hora em questão e um ponto fixo no tempo (
0
que implicitamente converte para1900-01-01 00:00:00.000
):e, em seguida, adicione esse número de dias ao ponto fixo no tempo, o que fornece a data original com a hora definida para
00:00:00.000
:ou mais sucintamente:
Usar uma parte da data diferente (por exemplo
hour
,mi
) funcionará de acordo.fonte
datetimeoffset
, tive que substituir0
porTODATETIMEOFFSET('1900-01-01 00:00:00', 0)
para evitar forçar o fuso horário local no resultado."Arredondado" para baixo como no seu exemplo. Isso retornará um valor varchar da data.
fonte
CONVERT(datetime, CONVERT(VARCHAR(13), @date, 120)+':00:00')
Sei que essa pergunta é antiga e há uma resposta aceita e outra alternativa. Também percebo que minha resposta responderá apenas metade da pergunta, mas para quem deseja arredondar para o minuto mais próximo e ainda tem um valor compatível com data e hora usando apenas uma única função :
Por horas ou segundos, use a resposta de Jeff Ogata (a resposta aceita) acima.
fonte
smalldatetime
foi adicionado no SQL 2008.Select convert(char(8), DATEADD(MINUTE, DATEDIFF(MINUTE, 0, getdate), 0), 108) as Time
irá arredondar os segundos para 00
fonte