Abu*_*iam 2 mysql sql null json
想象一下这样的桌子可以追踪棒球投手...
+------------+--------------------+-------+
| id | name | secondary_pitch |
+------------+--------------------+-------+
| 13 | Chris Sale | ['Curveball','Slider'] |
| 14 | Justin Verlander | ['Fastball','Changeup'] |
| 15 | CC Sabathia | ['Fastball','Curveball'] |
| 16 | Sonny Grey | ['Slider'] |
| 17 | Aldoris Chapman | [] |
+------------+--------------------+-------+
Run Code Online (Sandbox Code Playgroud)
请注意secondary_pitch列具有JSON值。因此,如果像Chapman这样的投手没有辅助音调,它将不会返回null,而是返回一个空的JSON字符串('[]')。
那我该如何计算没有次要音调的投手的数量呢?
我做不到
select count(*) from pitchers where secondary_pitch is null
Run Code Online (Sandbox Code Playgroud)
Gor*_*off 11
我认为您可以使用json_length():
where json_length(secondary_pitch) = 0
Run Code Online (Sandbox Code Playgroud)
您可以使用JSON_EXTRACT从您的列中获取第一个值并检查非空
where JSON_EXTRACT(`secondary_pitch`, '$[0]') is not null
Run Code Online (Sandbox Code Playgroud)
我发现这并没有回答与空数组([])匹配的原始问题,但这对我有用,{}在 mysql 与空字典()匹配5.7.20-0ubuntu0.16.04.1 - (Ubuntu)。
我使用了JSON_OBJECT函数,但JSON_ARRAY很可能也会以类似的方式工作,在不带参数调用时创建“空”对象。
如果我想匹配(空字典)vmkeys的 json 列值{},我使用以下查询:
SELECT vmkeys FROM `labinstances` WHERE vmkeys=JSON_OBJECT()
Run Code Online (Sandbox Code Playgroud)
为了匹配vmkeysNULL 值,我使用了这个:
SELECT vmkeys FROM `labinstances` WHERE vmkeys is NULL
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助...
这将检查 secondary_pitch 是(空)还是 '' (空字符串)
SELECT count(*) from pitchers WHERE secondary_pitch IS NULL OR secondary_pitch = '';
Run Code Online (Sandbox Code Playgroud)
你也可以这样使用。
SELECT count(*) from pitchers WHERE secondary_pitch LIKE '%[]%'
Run Code Online (Sandbox Code Playgroud)