2012-05-09 42 views
68

我正在從Varchar中的原始Feed中導入數據,我需要將varchar中的一列導入到字符串列中。我嘗試使用<column_name>::integer以及to_number(<column_name>,'9999999')但我得到錯誤,因爲有幾個空字段,我需要將它們檢索爲空或空到新表中。typecast字符串轉換爲整數 - Postgres

請讓我知道是否有相同的功能。

+3

你能告訴我們錯誤信息嗎?這將有助於 –

回答

72

大膽猜測:如果你的價值是一個空字符串,你可以使用NULLIF來取代它的NULL:

SELECT 
    NULLIF(your_value, '')::int 
18

如果你需要把空列作爲NULL S,試試這個:

SELECT CAST(nullif(<column>, '') AS integer); 

在另一方面,如果你有,你需要避免NULL值,嘗試:

SELECT CAST(coalesce(<column>, '0') AS integer); 

我同意,錯誤信息會幫助很多。

8

我不能在Lukas的帖子上發表評論(名氣太少,我很新)。

在我的PG設置to_number(NULL)不工作,所以我的解決辦法是:

SELECT CASE WHEN column = NULL THEN NULL ELSE column :: Integer END 
FROM table 
+1

這應該是有效的,但它應該是一個精簡等價的'NULLIF()'方法。該標準實際上將NULLIF定義爲CASE謂詞的一種形式。 – kgrittn

41

,你甚至可以去一個更進一步,如在此凝聚的領域限制,例如: -

SELECT CAST(coalesce(<column>, '0') AS integer) as new_field 
from <table> 
where CAST(coalesce(<column>, '0') AS integer) >= 10; 
14

我成功的沒有錯誤,因爲NULL,或特殊caracteres或空字符串的唯一方法是通過這樣做:

SELECT REGEXP_REPLACE(COALESCE(<column>, '0'), '[^0-9]*' ,'0')::integer FROM table 
+2

對我來說(9.6.2)這是唯一有效的,所有其他答案都失敗了。 –