'Postgres split timestamp column to time column and date column
Hi as the title says I have a column named healthtime in my table which is of type timestamp without timezone i.e.
Healthime
2012-02-02 08:15:00
I would like to split this into two new columns in the same table, one date column and one time column i.e.
Date Time
2012-02-02 08:15:00
Please can someone advise me how to do this (preferably in a single query),
Thanks, James
Solution 1:[1]
Not one query, but one transaction... should be fine as well:
My table looks like:
CREATE TABLE d (t timestamp);
Code for changing the table:
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;
Solution 2:[2]
SELECT Healthime::date from tbl_yourtable as date
SELECT Healthime::time(0) from tbl_yourtable as time
PostgreSQL Version: >= 10
Solution 3:[3]
select fake_table.healthtime
, cast(to_char(fake_table.healthtime, 'YYYY-MM-DD') as date) as "Date"
, cast(to_char(fake_table.healthtime, 'HH24:MI:SS') as time) as "Time"
from (select current_timestamp as "healthtime") as "fake_table"
output:
healthtime Date Time
timestamp with time zone date time without time zone
========================== ========== ======================
2022-04-22 14:20:25.678-04 2022-04-22 14:20:25
tested on PostgreSQL 9.3.25, compiled by Visual C++ build 1600, 64-bit running on Windows 8.1
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Szymon Lipi?ski |
Solution 2 | QuickAccount123 |
Solution 3 | Jonathan |