我正在從Varchar中的原始Feed中導入數據,我需要將varchar中的一列導入到字符串列中。我嘗試使用<column_name>::integer
以及to_number(<column_name>,'9999999')
但我得到錯誤,因爲有幾個空字段,我需要將它們檢索爲空或空到新表中。typecast字符串轉換爲整數 - Postgres
請讓我知道是否有相同的功能。
我正在從Varchar中的原始Feed中導入數據,我需要將varchar中的一列導入到字符串列中。我嘗試使用<column_name>::integer
以及to_number(<column_name>,'9999999')
但我得到錯誤,因爲有幾個空字段,我需要將它們檢索爲空或空到新表中。typecast字符串轉換爲整數 - Postgres
請讓我知道是否有相同的功能。
大膽猜測:如果你的價值是一個空字符串,你可以使用NULLIF來取代它的NULL:
SELECT
NULLIF(your_value, '')::int
如果你需要把空列作爲NULL
S,試試這個:
SELECT CAST(nullif(<column>, '') AS integer);
在另一方面,如果你有,你需要避免NULL
值,嘗試:
SELECT CAST(coalesce(<column>, '0') AS integer);
我同意,錯誤信息會幫助很多。
我不能在Lukas的帖子上發表評論(名氣太少,我很新)。
在我的PG設置to_number(NULL)
不工作,所以我的解決辦法是:
SELECT CASE WHEN column = NULL THEN NULL ELSE column :: Integer END
FROM table
這應該是有效的,但它應該是一個精簡等價的'NULLIF()'方法。該標準實際上將NULLIF定義爲CASE謂詞的一種形式。 – kgrittn
,你甚至可以去一個更進一步,如在此凝聚的領域限制,例如: -
SELECT CAST(coalesce(<column>, '0') AS integer) as new_field
from <table>
where CAST(coalesce(<column>, '0') AS integer) >= 10;
我成功的沒有錯誤,因爲NULL,或特殊caracteres或空字符串的唯一方法是通過這樣做:
SELECT REGEXP_REPLACE(COALESCE(<column>, '0'), '[^0-9]*' ,'0')::integer FROM table
對我來說(9.6.2)這是唯一有效的,所有其他答案都失敗了。 –
你能告訴我們錯誤信息嗎?這將有助於 –