将数据从列插入另一个不同的表列,并在PSQL中进行修改

时间:2017-11-18 16:26:16

标签: sql postgresql date

我有一个名为log的表,其中包含一个名为time的列,它是一个带时区的时间戳,我想删除时间,只留下日期,然后将修改结果放在名为error的另一个名为day的列中。 例如,如果日志表中的时间列看起来像,则错误表中的日期列应如下所示。

 |---------- time --------|      |-----day-----| 
 | 2016-07-01 09:00:00+02 |      | 2016-07-01  |
 | 2016-07-01 09:00:47+02 |      | 2016-07-01  |
 | 2016-07-01 09:00:34+02 |      | 2016-07-01  | 

3 个答案:

答案 0 :(得分:0)

INSERT INTO错误(日)(SELECT time :: date FROM log)

答案 1 :(得分:0)

PostgreSQL中有SUBSTRING函数可以执行您想要的操作。您可以从SELECT执行INSERT:

INSERT INTO error
    ( day
    )
SELECT SUBSTRING (time::TEXT FROM 1 FOR 10)
FROM log

对于更整洁的功能,请检查Postgres's Documentation - 我不确定你的PostgreSQL版本是什么,所以这是8.1版

答案 2 :(得分:0)

如果真的想要这样做,它应该是这样的:

update log
set day = cast (time as date)
where
  day is null or day != cast (time as date);

DML可能很昂贵,因此请务必不要更新值已匹配的行。

那就是说,不要这样做。在查询时解决此问题,或者如果您想要非常懒惰,请创建一个视图:

create or replace view log_dated as
select
  l.*, cast (l.time as date) as day
from log l;