Eu tenho a coluna timestamp usada para agendar eventos do calendário. Eu gostaria de alterar apenas a parte da hora, mantendo a parte da data intocada.
Como posso fazer isso? estou no postgresql
Atual:
2017-07-01 00:00:00
Para:
2017-07-01 17:00:00
Você não pode alterar significativamente a hora relativamente em qualquer direção (para frente ou para trás) sem afetar potencialmente a data. Timestamp é um híbrido de data e hora, percebendo que os dois são inseparáveis em qualquer instância do mundo real. Você não pode ir de
2017-07-01 00:00:00
para2017-07-01 17:00:00
de forma segura incrementando o tempo. Se você tentar, você está fazendo uma suposição sobre qual era a data. No entanto, você pode definir a parte da hora de um carimbo de data/hora, descartando a parte da data inteiramente comdate_trunc
. Nesse método, você garante como a parte do tempo está definida (ou pelo menos com muito mais certeza). Contanto que você não force especificamente um rollover explícito (como adicionar 25 horas) ao defini-lo, você deve estar bem. Vejo aqui duas perguntas:Aqui está algum código mostrando ambas as abordagens
Além da matemática de data e hora, pense
$time=17
, vs$datetime+=17
. Um deles é muito mais seguro e menos propenso a criar capotamento. Você deseja incrementar a coluna atual em 17 horas ou configurá -la para17:00:00
esse dia?Adicione o INTERVAL desejado
Dê uma olhada em: Funções de data/hora e operadores na documentação do Postgres.
dbfiddle aqui
Uma alternativa é converter para a data e depois voltar para o timestamp
Isso garante que a data seja preservada