我有一个名为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 |
答案 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;