我有一个表,其中所有列都是text类型,有一个名为created的列,另一个名为modified。
它们都有时区的时间戳,但是是数据类型的文本。
我需要将这两列都转换为时间戳,但我已经读过,因为PSQL不允许,所以没有办法只是“强制转换”到时间戳。
有任何想法可以解决这个问题吗?我一直在尝试这个:
to_timestamp(created) as created_user,
to_timestamp(modified) as modified_user,
但它会引发语法错误。
ERROR: column "2017-02-22 16:30:06.79156 UTC" does not exist
LINE 1: SELECT to_timestamp("2017-02-22 16:30:06.79156 UTC")
任何想法我可能做错了吗?
答案 0 :(得分:0)
我相信这是你调用to_timestamp()的方式,需要2个参数:
CREATE TABLE Table1
("created" varchar(30), "modified" varchar(30))
;
INSERT INTO Table1
("created", "modified")
VALUES
('2017-02-22 16:30:06.79156 UTC', '2017-10-11 15:30:06.79156 UTC'),
('2017-04-21 16:30:06.79156 UTC', '2017-10-11 15:30:06.79156 UTC'),
('2017-04-19 16:30:06.79156 UTC', '2017-10-11 15:30:06.79156 UTC'),
('2017-05-23 16:30:06.79156 UTC', '2017-10-11 15:30:06.79156 UTC')
;
快捷方法有效,函数to_timestamp(text,text)也可以工作,例如。
select
created::timestamptz
, modified::timestamptz
from table1;
select
to_timestamp(created,'YYYY-MM-DD HH24:MI:SS.US')
, to_timestamp(modified,'YYYY-MM-DD HH24:MI:SS.US')
from table1;
| created | modified |
|----------------------------|----------------------------|
| 2017-02-22T16:30:06.79156Z | 2017-10-11T15:30:06.79156Z |
| 2017-04-21T16:30:06.79156Z | 2017-10-11T15:30:06.79156Z |
| 2017-04-19T16:30:06.79156Z | 2017-10-11T15:30:06.79156Z |
| 2017-05-23T16:30:06.79156Z | 2017-10-11T15:30:06.79156Z |
但没有第二个参数的to_timestamp()失败:
select
to_timestamp(created)
, to_timestamp(modified)
from table1
;
错误:函数to_timestamp(字符变化)不存在提示: 没有函数匹配给定的名称和参数类型。你可能需要 添加显式类型转换。位置:15