Postgresql Postgres将时间戳列拆分为时间列和日期列

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); 更

嗨,正如标题所说,我的表中有一个名为healthtime的列,它的类型是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