2017-05-04 65 views
1

我有一個表稱爲含5列temperaturecentredatetmpmaxtmpminrrquotdatetmpmaxtmpminrrquot存儲爲character varying,我需要將它們轉換爲double precision,以操縱它們來計算的一些統計數據。 我用下面的SQL命令:PostgreSQL的鑄造數據

ALTER TABLE public.temperature 
    ALTER COLUMN "TMPMAX" TYPE double precision 
    USING cast("TMPMAX" AS double precision) 

但是因爲有一些細胞含有''(無)它並沒有爲整個工作表中。與YYYY-MM-DD格式例如:

關於日期欄,是有辦法將其澆鑄到日期類型(YYYYMMDD20030122數據被存儲在這種格式。)。 1968-01-13

請幫助解決這兩個問題。

+1

爲什麼你會轉換你的目標是讓雙精度日期欄,以及它將如何幫助戰鬥空值,我沒有,所以我建議打空值 –

+0

方式我同意瓦。。如果這實際上是一個日期,你應該把它轉換爲'DATE'而不是雙精度 –

回答

1

您可以在USING使用條件,如在這裏:

t=# create table s106 (i text); 
CREATE TABLE 
t=# insert into s106 values ('1'),(''); 
INSERT 0 2 
t=# alter table s106 alter COLUMN i type double precision 
t-#  USING cast(i AS double precision); 
ERROR: invalid input syntax for type double precision: "" 

條件:

t=# alter table s106 alter COLUMN i type double precision 
    USING cast(case when length(i) < 1 then null else i end AS double precision); 
ALTER TABLE 
+1

或cast(nullif(trim(i),'')' –

+0

yes - 完全同意我的例子。我不確定如果op想讓它們爲NULL,那麼我建議完整'case'清晰靈活 –

+0

非常感謝,它的工作。 – geoinfo

1

關於日期類型,如果我理解正確的,你必須存儲在character varying類型字段日期,這樣:20030122,並且您需要將值轉換爲date類型,(值將變成如下所示:2003-01-22

如果是的話,你可以嘗試:

ALTER TABLE temperature 
ALTER COLUMN "date" TYPE date 
USING cast("date" as date) 
+0

謝謝,它工作。 – geoinfo