2015-09-10 109 views
0

我有一个名为cit_viol_time的文本类型列的数据库,其中每行都有一个整数。我想以某种方式将此整数转换为时间戳。Postgresql将文本转换为时间戳

我已经试过如下:

select cit_viol_time::time(0) from table limit 1其中 “表” 是我的表名

当我在Navicat执行它,我收到以下错误:

ERROR: invalid input syntax for type time: "838"

上午我试图不正确地投下这个文本?如果是这样,我怎样才能把它转换为实际的时间戳,即15:44

我正在阅读关于转换的PG手册,但我想我在这里错过了一些东西。

更新 我做了铸塑时间,所以我想,而不是下面的错误:

SELECT to_timestamp(cit_viol_time, 'HH24:MI') from tablename limit 1;

这似乎是工作,但它给我的时间奇数格式。

0001-03-08 02:00:00-05:50:36 BC

所有我试图拔出是HH:MM在24小时格式是什么,我想我与HH24:MI做。

+0

哪些时间戳应该' 838'代表?如果你想要一个'时间戳',你为什么要选择'时间'? –

+0

同意@a_horse_with_no_name。 postgres documntation是明确的类型转换 - http://www.postgresql.org/docs/9.4/static/functions-formatting.html –

+0

你说得对,我应该使用to_timestamp。我会用我刚刚尝试的内容更新我的问题。 – nulltek

回答

0

从你的问题SO是不清楚哪个实际值字段cit_viol_time包含。

由于它是作为“时间”所引用我可以假设它可以定义为

  • EPOCH时间“的秒数因为1970-01-01 00:00:00当地时间”。欲了解更多信息,请参阅manual如果是这种情况,要使用to_timestamp函数,您还需要知道“日期”部分,或者在表格中的其他字段中提供。

  • 否则,整数值表示某些非常见时间单位(如分钟)中的时间。在这种情况下,例如838将是838分钟才午夜,因此一些数学需要应用来获得结果

    int(838/60) = 13 hours 
    mod(838,60) = 58 min` 
    

    所以在psql里,这将是:

    postgres=# SELECT INTERVAL '1 minutes'*cit_viol_time AS time 
          FROM (select 838 as cit_viol_time) tbl; 
        time 
    ---------- 
    13:58:00 
    (1 row) 
    
相关问题