簡體   English   中英

如何在 JSON 中不存在鍵的情況下將 postgres JSON 列轉換為 int (簡單的 JSON 值)?

[英]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”

jsonval中的值是簡單的 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;

哪個有效,但肯定不是最好的方法,對吧?

這是一個 db<>fiddle 示例表和上面的語句。

找到了方法:

您可以通過密鑰路徑訪問內容(參見例如此 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

在此處查看更新的 db<>fiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM