2014-09-16 2 views
0

Я пытаюсь создать запрос, который обновляет метку времени всех существующих строк конкретной таблицы.Обновление только дня из существующего столбца dateandtime для всей таблицы

Ниже приведен пример таблицы для иллюстрации:

"DateAndTime";  ID; value 
"2014-04-01 00:00:03"; 44; 10 
"2014-04-01 00:00:03"; 45 ; 120 
"2014-04-01 00:00:03"; 46 ; 80 
"2014-04-01 00:00:03"; 47 ; 30000 
"2014-04-01 00:00:13"; 44 ; 11 
"2014-04-01 00:00:13"; 45 ; 122 
"2014-04-01 00:00:13"; 46 ; 76 
"2014-04-01 00:00:13"; 47 ; 30200 

Теперь я хочу изменить только день с текущей датой, но сохранить время результат будет что-то вроде

"DateAndTime"  | ID| value 
Current_date + '00:00:03'; 44; 10 
Current_date + '00:00:03'; 45; 120 
Current_date + '00:00:03'; 46; 80 
Current_date + '00:00:03'; 47; 30000 
Current_date + 00:00:13"; 44; 11 
Current_date + 00:00:13"; 45; 122 
Current_date + 00:00:13"; 46; 76 
Current_date + 00:00:13"; 47; 30200 

I знаю, что я могу сделать следующее:

UPDATE "MyTable" 
SET "DateAndTime"= (Select date_trunc('day',Localtimestamp) + ''00:00:03') 

И это работает, но у меня есть тысячи строк, поэтому мне нужно заменить + ''00: 00: 03' на каждое значение столбца по умолчанию dateandtime по умолчанию со всем извлеченным временем. Например, если была перевернута дата_trunc, ведьма усекает с секунд до часов.

Теперь вы можете заменить время на значение по умолчанию. Или вы знаете, как лучше реализовать этот запрос.

Заранее благодарен

ответ

0
update MyTable set DateAndTime = now()::date + DateAndTime::time; 
+0

спасибо, те, где функции, которые я искал изначально, но я нашел решение для возрастов. Спасибо, что показали мне этот способ доступа к разделам timmestamps. – Osceptrus

1

Я нашел решение; Вместо того, чтобы пытаться манипулировать раздельно дату и время мне просто нужно найти разницу между current_timmestamp и timmestamp, что я хочу, чтобы обновить и добавить этот интервал

Код:

UPDATE "MyTable" 
SET "DateAndTime"= "DateAndTime" + age(date_trunc('day',"DateAndTime")); 

Вы должны trunc timestamp за день, поэтому часы, минуты, секунды и больше не входят в уравнение.

Смежные вопросы