如何使用 json_extract mysql 8.0 识别空值
How to identify null values using json_extract mysql 8.0
使用 JSON_EXTRACT,
时识别空值的正确方法是什么
我想使用 case 语句来识别 json 字段中的空值,如果该值为空,则将其替换为另一个值,在本例中为 1.
CREATE TABLE `Log` (
`change` json DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=345 DEFAULT CHARSET=utf32 COLLATE=utf32_unicode_ci;
insert into `Log` (`change`) values (JSON_OBJECT('documentNumber', 2));
insert into `Log` (`change`) values (JSON_OBJECT('documentNumber', null));
select case
when isnull(JSON_EXTRACT(`change`, '$.documentNumber')) = 1 then '1'
else JSON_EXTRACT(`change`, '$.documentNumber')
end as 'result'
from `Log`;
对于这个查询,我得到了结果,
result
2
null
但我很期待,
result
2
1
JSON 'null'
文字不是 NULL 值。
查看此演示:
CREATE TABLE `Log` (
`change` json DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=345 DEFAULT CHARSET=utf32 COLLATE=utf32_unicode_ci;
insert into `Log` (`change`) values (JSON_OBJECT('documentNumber', 2));
-- JSON 'null'
insert into `Log` (`change`) values (JSON_OBJECT('documentNumber', null));
-- no key, this will produce regular NULL
insert into `Log` (`change`) values (JSON_OBJECT('documentNumberX', null));
select `change`,
case
when isnull(JSON_EXTRACT(`change`, '$.documentNumber')) = 1 then '1'
else JSON_EXTRACT(`change`, '$.documentNumber')
end as 'result',
JSON_EXTRACT(`change`, '$.documentNumber') IS NULL test1,
JSON_EXTRACT(`change`, '$.documentNumber') = CAST('null' AS JSON) test2,
case when JSON_EXTRACT(`change`, '$.documentNumber') = CAST('null' AS JSON)
then '1'
else JSON_EXTRACT(`change`, '$.documentNumber')
end as 'result2'
from `Log`;
使用 JSON_EXTRACT,
时识别空值的正确方法是什么我想使用 case 语句来识别 json 字段中的空值,如果该值为空,则将其替换为另一个值,在本例中为 1.
CREATE TABLE `Log` (
`change` json DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=345 DEFAULT CHARSET=utf32 COLLATE=utf32_unicode_ci;
insert into `Log` (`change`) values (JSON_OBJECT('documentNumber', 2));
insert into `Log` (`change`) values (JSON_OBJECT('documentNumber', null));
select case
when isnull(JSON_EXTRACT(`change`, '$.documentNumber')) = 1 then '1'
else JSON_EXTRACT(`change`, '$.documentNumber')
end as 'result'
from `Log`;
对于这个查询,我得到了结果,
result
2
null
但我很期待,
result
2
1
JSON 'null'
文字不是 NULL 值。
查看此演示:
CREATE TABLE `Log` (
`change` json DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=345 DEFAULT CHARSET=utf32 COLLATE=utf32_unicode_ci;
insert into `Log` (`change`) values (JSON_OBJECT('documentNumber', 2));
-- JSON 'null'
insert into `Log` (`change`) values (JSON_OBJECT('documentNumber', null));
-- no key, this will produce regular NULL
insert into `Log` (`change`) values (JSON_OBJECT('documentNumberX', null));
select `change`,
case
when isnull(JSON_EXTRACT(`change`, '$.documentNumber')) = 1 then '1'
else JSON_EXTRACT(`change`, '$.documentNumber')
end as 'result',
JSON_EXTRACT(`change`, '$.documentNumber') IS NULL test1,
JSON_EXTRACT(`change`, '$.documentNumber') = CAST('null' AS JSON) test2,
case when JSON_EXTRACT(`change`, '$.documentNumber') = CAST('null' AS JSON)
then '1'
else JSON_EXTRACT(`change`, '$.documentNumber')
end as 'result2'
from `Log`;