想象一下一张跟踪棒球投手的桌子,就像这样......
+------------+--------------------+-------+
| 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 | [] |
+------------+--------------------+-------+
请注意,secondary_pitch列具有 JSON 值。因此,如果像查普曼这样的投手没有辅助投球,它不会返回 null,而是返回一个空的 JSON 字符串 ('[]'(。
那么我怎样才能计算出没有二次投球的投手数量呢?
我做不到...
select count(*) from pitchers where secondary_pitch is null
我认为你可以只使用json_length()
:
where json_length(secondary_pitch) = 0
您可以使用JSON_EXTRACT
从列中获取第一个值并检查是否为空
where JSON_EXTRACT(`secondary_pitch`, '$[0]') is not null
演示
我看到这不是回答与空数组([]
(匹配的原始问题,但这对我有用,在mysql5.7.20-0ubuntu0.16.04.1 - (Ubuntu)
与空字典({}
(匹配。
我使用了JSON_OBJECT函数,但JSON_ARRAY很可能也会以类似的方式工作,在没有参数的情况下调用时创建"空"对象。
如果我想与 json 列vmkeys
值匹配{}
(空字典(,我使用以下查询:
SELECT vmkeys FROM `labinstances` WHERE vmkeys=JSON_OBJECT()
为了与 NULL 的vmkeys
值匹配,我使用了这个:
SELECT vmkeys FROM `labinstances` WHERE vmkeys is NULL
希望这有帮助...
这将检查secondary_pitch的位置(null(或''(空字符串(
SELECT count(*) from pitchers WHERE secondary_pitch IS NULL OR secondary_pitch = '';
你也可以这样使用。
SELECT count(*) from pitchers WHERE secondary_pitch LIKE '%[]%'
您可以使用以下函数
SELECT * FROM TABLE_NAME WHERE
JSON_SEARCH(secondary_pitchers, 'all', '')
IS NOT NULL;