[英]How to cast postgres JSON column to int without key being present in JSON (simple JSON values)?
我正在處理 postgresql 中的數據,如下面的mytable
中的字段id
(類型int
)和val
(類型json
):
ID | 值 |
---|---|
1 | “無效的” |
2 | “0” |
3 | “2” |
json
列val
中的值是簡單的 JSON 值,即只是帶有引號的字符串並且沒有鍵。
我查看了 SO 帖子How to convert postgres json to integer並嘗試了類似那里提出的解決方案
SELECT (mytable.val->>'key')::int FROM mytable;
但就我而言,我沒有解決該字段的密鑰並將其留空不起作用:
SELECT (mytable.val->>'')::int as val_int FROM mytable;
這將為所有行返回NULL
。
我想出的最好的方法如下(首先轉換為varchar
,修剪引號,過濾掉字符串“null”,然后轉換為int
):
SELECT id, nullif(trim('"' from mytable.val::varchar), 'null')::int as val_int FROM mytable;
哪個有效,但肯定不是最好的方法,對吧?
找到了方法:
您可以通過密鑰路徑訪問內容(參見例如此 PostgreSQL JSON 備忘單):
#
運算符,您可以通過密鑰路徑訪問 json 字段。 像這樣{}
指定一個空的密鑰路徑允許您在沒有密鑰的情況下獲取您的內容。>>
將返回不帶引號的內容,因此不需要trim()
function。總的來說,聲明
select id
, nullif(val#>>'{}', 'null')::int as val_int
from mytable
;
將返回前 json 列的內容為int
,分別為NULL
(在 postgresql >= 9.4):
ID | val_int |
---|---|
1 | NULL |
2 | 0 |
3 | 2 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.