2017-08-13 112 views
0

的时间在我的Postgres数据库,我有如下表:的Postgres,更新时间戳为当前日期,但保留

SELECT start_at, end_at FROM schedules; 

+---------------------+---------------------+ 
| start_at   | end_at    | 
|---------------------+---------------------| 
| 2016-09-05 16:30:00 | 2016-09-05 17:30:00 | 
| 2016-09-05 17:30:00 | 2016-09-05 18:30:00 | 
| 2017-08-13 03:00:00 | 2017-08-13 07:00:00 | 
| 2017-08-13 03:00:00 | 2017-08-13 07:00:00 | 
| 2017-08-13 18:42:26 | 2017-08-13 21:30:46 | 
| 2017-08-10 00:00:00 | 2017-08-10 03:30:00 | 
| 2017-08-09 18:00:00 | 2017-08-10 03:00:00 | 
| 2017-08-06 23:00:00 | 2017-08-07 03:00:00 | 
| 2017-08-07 01:00:00 | 2017-08-07 03:48:20 | 
| 2017-08-07 01:00:00 | 2017-08-07 03:48:20 | 
| 2017-08-07 18:05:00 | 2017-08-07 20:53:20 | 
| 2017-08-07 14:00:00 | 2017-08-08 01:00:00 | 
| 2017-08-07 18:00:00 | 2017-08-07 20:48:20 | 
| 2017-08-08 08:00:00 | 2017-08-09 00:00:00 | 
| 2017-08-09 21:30:00 | 2017-08-10 00:18:20 | 
| 2017-08-13 03:53:26 | 2017-08-13 06:41:46 | 
+---------------------+---------------------+ 

假设我也有一个ID列,我想要做的就是更新所有今天(现在)的开始和结束时间,要完成此任务的最有效的SQL是什么?我的表可能有数百万行。

回答

1

我能想到的最好的是这样的:

update schedules 
    set start_at = current_date + start_at::time 
     , end_at = current_date + end_at::time 
    WHERE start_at::date <> current_date 
     or end_at::date <> current_date; 

算术正在迅速与访问行。 如果不是所有行都需要更新,where子句将有助于提高效率。更新很昂贵。

相关问题