SQLite 将 json 提取到生成的列中 - 如何删除 NULL 值

问题描述 投票:0回答:1

我将带有原始 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 返回不为空?

sqlite
1个回答
1
投票

答案:使用 COALESCE

CREATE TABLE t1 (
  raw TEXT,
  c1 TEXT GENERATED ALWAYS AS (COALESCE(json_extract(raw, '$.field1'), json_extract(raw,'$.field2'))) VIRTUAL   
)
© www.soinside.com 2019 - 2024. All rights reserved.