Postgresql Postgres将时间戳列拆分为时间列和日期列
嗨,正如标题所说,我的表中有一个名为healthtime的列,它的类型是timestamp,没有时区,即Postgresql Postgres将时间戳列拆分为时间列和日期列,postgresql,Postgresql,嗨,正如标题所说,我的表中有一个名为healthtime的列,它的类型是timestamp,没有时区,即 Healthime 2012-02-02 08:15:00 我想在同一个表中将其拆分为两个新列,一个日期列和一个时间列,即 Date Time 2012-02-02 08:15:00 请有人告诉我如何做(最好是在一个单一的查询) 谢谢, James不是一个查询,而是一个事务。。。也可以: 我的桌子看起来像: CREATE TABLE d (t timestamp); 更
Healthime
2012-02-02 08:15:00
我想在同一个表中将其拆分为两个新列,一个日期列和一个时间列,即
Date Time
2012-02-02 08:15:00
请有人告诉我如何做(最好是在一个单一的查询)
谢谢,
James不是一个查询,而是一个事务。。。也可以: 我的桌子看起来像:
CREATE TABLE d (t timestamp);
更改表格的代码:
BEGIN;
ALTER TABLE d ADD COLUMN dat date;
ALTER TABLE d ADD COLUMN tim time;
UPDATE d
SET
dat = t::date,
tim = t::time;
ALTER TABLE d DROP COLUMN t;
COMMIT;
PostgreSQL版本:>=10您为什么要这样做?您知道可以使用例如:
HealthTime::date
(您也可以在此基础上创建索引,以加快查询速度)来“动态”完成此操作。你可以在前端创建一个视图来简化这项工作。然后,视图对我来说似乎是一个更好的解决方案。同样,你可以在不更改数据的情况下完成这项工作。只需在healthtime::date
上创建一个视图和一个索引,当您运行select*from metastatus,其中healthtime::date=date“2013-04-04”
时,将使用该视图和索引,可以在healthtime::time和healthtime::date上创建单独的索引。我怀疑@a_horse_with_no_name认为动态截断/舍入比两列方法更灵活是正确的。谢谢,但我的大型数据库有1.585亿行,这需要永远的时间。我有没有可能加快速度?t::date和date(t)之间有什么区别吗?好的,更好的解决方案是使用前面提出的索引。否则就等它结束吧:)我认为t::date和date(t)之间没有区别。谢谢,你的答案完全回答了我的问题,所以我将其标记为接受,尽管在我的数据库中它花费的时间太长。
SELECT Healthime::date from tbl_yourtable as date
SELECT Healthime::time(0) from tbl_yourtable as time