Postgresql

COALESCE 與演員

  • April 25, 2018

我正在從jsonbPostgres 的列中提取數據,並將其轉換為 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 ...

有關的:

引用自:https://dba.stackexchange.com/questions/204844