Postgresql
COALESCE 與演員
我正在從
jsonb
Postgres 的列中提取數據,並將其轉換為 aninteger
以將其與計數進行比較。問題是,在某些情況下,數據顯然無法轉換integer
,我得到:SQL Error [22P02]: ERROR: invalid input syntax for integer: ""
我已經嘗試了這兩種方法,它們都適用於前 400-500 行,直到遇到錯誤數據的一行:
select coalesce(CAST(raw_record->>'ObjectCount' AS integer), 0) from resources where record_id = '274015000000' select CAST(raw_record->>'ObjectCount' AS integer) from resources where record_id = '274015000000'
0
如果演員表不起作用,有沒有辦法回退?
NULLIF
,就像你已經發現:SELECT NULLIF(raw_record->>'ObjectCount','')::int ...
.. 用 NULL 替換空字元串。嚴格來說,您的問題要求更多:
0
如果演員表不起作用,有沒有辦法回退?更通用的解決方案:
COALESCE
與問題無關。但是稍微調整一下您在答案中的內容,以減少來迴轉換:SELECT COALESCE(NULLIF(raw_record->>'ObjectCount','')::int, 0) ...
將這兩個函式替換為
CASE
:SELECT CASE WHEN raw_record->>'ObjectCount' <> '' -- excludes null and '' THEN (raw_record->>'ObjectCount')::int ELSE 0 END ...
有關的: