检查JSON值在MySQL中是否为空?

时间:2018-06-30 12:02:02

标签: mysql sql json null

想象一下这样一个桌子,它可以跟踪棒球投手……

     +------------+--------------------+-------+
     | 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

5 个答案:

答案 0 :(得分:3)

我认为您可以只使用json_length()

where json_length(secondary_pitch) = 0

答案 1 :(得分:2)

您可以使用JSON_EXTRACT从列中获取第一个值,并检查是否不为空

where JSON_EXTRACT(`secondary_pitch`, '$[0]') is not null

Demo

答案 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;