我在表VM中有两列(date character varying, time character varying
)。现在,我想合并这两列,并将类型更改为时间戳。谁能帮我做到这一点?
否则
我想根据年份(2017,2018)分离数据。我使用了substring(date,'2018')命令,但该命令会回复显示NULL
的2017年数据,而不是显示2018年数据的2017年数据。
答案 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
上使用索引