想象一下这样一个桌子,它可以跟踪棒球投手……
+------------+--------------------+-------+
| 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值。因此,如果像Chapman这样的投手没有辅助音调,它将不会返回null,而是返回一个空的JSON字符串('[]')。
那我该如何计算没有次要音高的投手的数量呢?
我做不到...
select count(*) from pitchers where secondary_pitch is null
答案 0 :(得分:3)
我认为您可以只使用json_length()
:
where json_length(secondary_pitch) = 0
答案 1 :(得分:2)
答案 2 :(得分:1)
这将检查secondary_pitch是(null)还是''(空字符串)
SELECT count(*) from pitchers WHERE secondary_pitch IS NULL OR secondary_pitch = '';
您也可以这样使用。
SELECT count(*) from pitchers WHERE secondary_pitch LIKE '%[]%'
答案 3 :(得分:1)
我看到这没有回答关于空数组([]
)匹配的原始问题,但这在mysql {}
上对空字典(5.7.20-0ubuntu0.16.04.1 - (Ubuntu)
)匹配对我有用。
我使用了JSON_OBJECT函数,但是很有可能JSON_ARRAY也可以以类似的方式工作,在不带参数的情况下创建“空”对象。
如果我想与vmkeys
(空字典)的json列{}
值匹配,我使用以下查询:
SELECT vmkeys FROM `labinstances` WHERE vmkeys=JSON_OBJECT()
要与vmkeys
的NULL值进行匹配,我使用了以下方法:
SELECT vmkeys FROM `labinstances` WHERE vmkeys is NULL
希望这对您有帮助...
答案 4 :(得分:0)
您可以使用以下功能
SELECT * FROM TABLE_NAME WHERE
JSON_SEARCH(secondary_pitchers, 'all', '')
IS NOT NULL;