2015-09-10 107 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) 
    
相關問題