将字符更改为时间戳

时间:2018-09-11 05:08:43

标签: postgresql ddl

我在表VM中有两列(date character varying, time character varying)。现在,我想合并这两列,并将类型更改为时间戳。谁能帮我做到这一点?

否则 我想根据年份(2017,2018)分离数据。我使用了substring(date,'2018')命令,但该命令会回复显示NULL的2017年数据,而不是显示2018年数据的2017年数据。

1 个答案:

答案 0 :(得分:1)

您没有告诉我们该表的确切内容,但是类似的事情应该起作用:

添加新的timestamp列(并为此找到比"timestamp"ts_column更好的名称)

alter table the_table add ts_column timestamp;

然后您需要更新数据

update the_table
    set ts_column = to_timestamp(concat("date", ' ', "time"), 'yyyy-mm-dd hh24:mi:ss')
where "date" is not null;

以上内容假设存储在名为"date"的列中的日期和存储在名为"time"的列中的时间被格式化为ISO日期和时间值。如果不是,则需要将参数调整为to_timestamp()函数。有关格式掩码的详细信息,please see the manual

然后删除旧列:

alter table the_table drop "date", drop "time";

要从日期或时间戳列中提取年份,请使用extract函数:

where extract(year from ts_column) = 2018

请注意,以上内容将无法使用ts_column上的索引来加快查询速度。

另一种写作方式是:

where ts_column >= date '2018-01-01' 
  and ts_column < date '2019-01-01';

将能够在ts_column上使用索引