2016-03-08 47 views
0

我在GreenPlum公司(PostgreSQL系統)。與所有領域蜇一個表,我想編輯的類型:鑄造一個字符串,日期和時間在PostgreSQL的

要做到這一點我創建了一個觀點:

CREATE VIEW typed_view AS 

SELECT CAST(sid AS bigint), CAST(gid AS bigint), 

...

但我與日期和時間字段的一個問題,我想這個命令,但沒有奏效:

to_utc_timestamp(from_unixtime(unix_timestamp(eventdatetime,"yyyy-MM-dd 

HH:MM:SS「)), 'UTC')AS eventdatetime,

之後,我試過的PostgreSQL符號:

to_timestamp(eventdatetime, 'YYYY Mon DD HH24 MI SS') AS eventdatetime, 

但仍然沒有工作。

任何人都知道如何轉換它?

我也有這個命令不工作:

CASE WHEN fix = "True" THEN TRUE ELSE FALSE END AS fix, 

在此先感謝

回答

2

你沒有提供的示例數據,所以我會假設你的數據看起來像「YYYY週一DD HH24 MI SS「。因此,2016年1月4日下午2:15:20在您的數據中會顯示爲'2016年1月4日14 15 20'。所以用這個例子的數據,轉換應該是這樣的:

gpadmin=# select to_timestamp('2016 Jan 04 14 15 20', 'yyyy mon dd hh24 mi ss') as col1; 
      col1   
------------------------ 
2016-01-04 14:15:20-05 
(1 row) 

現在,這是一個時間戳其中還包括時區偏移量爲我的服務器是-5。要將其轉換爲不帶時區的時間戳,只需添加:: timestamptz。

gpadmin=# select to_timestamp('2016 Jan 04 14 15 20', 'yyyy mon dd hh24 mi ss')::timestamp as col1; 
     col1   
--------------------- 
2016-01-04 14:15:20 
(1 row) 

一個非常重要的說明。將數據從字符串轉換爲不同的數據類型是昂貴的。這在所有數據庫中也是一樣的。對於每次SELECT語句而言,最好一次性支付此轉換的費用​​。所以,我也建議你把這個轉換變成物理表而不是使用VIEW。

+0

謝謝你的回答。我們的目標是在Greenplum中創建一個VIEW,因爲它很快,而且在類型轉換之後,我創建了一個表來將它加載到R中:將表格消息創建爲select * from msgs_typed_view。 至於日期格式,它看起來像這樣:\t 2013-05-26 23:59:54 –

+0

您的字符串值是「2013-05-26 23:59:54」?如果是這樣,那是一個簡單的轉換。選擇'2013-05-26 23:59:54':: timestamp;如果您想要時區,只需添加:: timestamp或:: timestamptz。 –