我將帶有原始 json 的 TEXT 列保存到 SQLite 資料庫中。json 模式不是唯一的。我想使用生成的列從列中提取raw值
我可以處理多個列,每個列都使用不同的路徑來提取值
CREATE TABLE t (
raw TEXT,
c1 TEXT GENERATED ALWAYS AS (json_extract(raw, '$.field1')) VIRTUAL,
c2 TEXT GENERATED ALWAYS AS (json_extract(raw, '$.field2')) VIRTUAL
)
結果:
sqlite> select * from t;
┌────────────────────────────────────────┬────────┬────┐
│ raw │ c1 │ c2 │
├────────────────────────────────────────┼────────┼────┤
│ {"field1":"value1", "field3":"value2"} │ value1 │ │
└────────────────────────────────────────┴────────┴────┘
或者我可以將包含多個路徑的單列傳遞給 json_extract
CREATE TABLE t1 (
raw TEXT,
c1 TEXT GENERATED ALWAYS AS (json_extract(raw, '$.field1', '$.field2')) VIRTUAL
)
結果
sqlite> select * from t1;
┌────────────────────────────────────────┬─────────────────┐
│ raw │ c1 │
├────────────────────────────────────────┼─────────────────┤
│ {"field1":"value1", "field3":"value2"} │ ["value1",null] │
└────────────────────────────────────────┴─────────────────┘
我更喜歡第二種解決方案,有一個欄位。但是具有多個路徑的 json_extract 回傳一個陣列,其中包含未滿足的路徑的 NULL 結果["value1",null]
我怎么能有一個運算式總是有一個字串,只有第一個 json_extract 回傳不為空?
uj5u.com熱心網友回復:
答案:使用 COALESCE
CREATE TABLE t1 (
raw TEXT,
c1 TEXT GENERATED ALWAYS AS (COALESCE(json_extract(raw, '$.field1'), json_extract(raw,'$.field2'))) VIRTUAL
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/415046.html
標籤:
