判断json中字段是否为null

【 TiDB 使用环境】测试
【 TiDB 版本】v6.5.2

当json中字段值为null时,如何判断?为什么用is null无法判断?

可复现脚本,返回结果是0

CREATE TABLE tmp_json (c_json text DEFAULT NULL);

INSERT INTO tmp_json VALUES('{"type":null}');

SELECT 
	JSON_EXTRACT(c_json,'$.type') ext,
	CASE WHEN JSON_EXTRACT(c_json,'$.type') IS NULL THEN 1
		 WHEN JSON_EXTRACT(c_json,'$.type') = NULL THEN 2
		 WHEN JSON_EXTRACT(c_json,'$.type') = '' THEN 3
		 WHEN JSON_EXTRACT(c_json,'$.type') = 'null' THEN 4
	ELSE 0 END flag	
FROM tmp_json

json中应该转换成字符串比较吧,不能用is null来判断

判断等于''也不行 :joy:

c_json->>‘$.type’ 试试

1 个赞

SELECT *
FROM tmp_json
WHERE JSON_EXTRACT(c_json, ‘$.type’) IS NULL
OR JSON_EXTRACT(c_json, ‘$.type’) = ‘null’;
这样试试

1 个赞

:call_me_hand: :call_me_hand: :call_me_hand:这样可以

image

不行,取不到

image

扒拉到一个类似的贴子,这样写也可以,要加上COALESCE

DBWEAVER貌似比较费眼 可以换DataGrip :joy:

加个什么连接字符串的concat等也行
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_json-inline-path
这些去掉了双引号

话说,为什么要在数据库判断json内的值?

Dbeaver最大的优点,免费……

:yum:DBA处理数据,不都是在数据库里解析json嘛

:yum:净说大实话。

Navicat17出lite版本了(免费的),基础功能都有,用这个也是可以的~

基础功能不够用吧,有功能对比清单么?

Navicat Premium Lite | 简单的数据库管理和开发工具 可以看下~

没有常用的传输功能,最重要的是,不支持tidb,DBeaver支持TiDB。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。