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

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)

  • “为什么?效果很好” 为什么?@jsnceo 因为 `["Curveball", "Slider"]` 是有效的 JSON 在 https://jsonlint.com/ 上检查它 / `['Curveball','Slider']` 在这里无效你不应该冒险使用无效的 JSON annywhere 在 anny 编程语言中,即使它“有效” MySQL 也应该在 `['Curveball','Slider']` 上给出错误.. 简而言之,JSON 数组或对象中的字符串值和键需要用双引号引起来JSON 标准 (2认同)

M K*_*aid 8

您可以使用JSON_EXTRACT从您的列中获取第一个值并检查非空

where JSON_EXTRACT(`secondary_pitch`, '$[0]') is not null
Run Code Online (Sandbox Code Playgroud)

演示


R. *_*mac 6

我发现这并没有回答与空数组([])匹配的原始问题,但这对我有用,{}在 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)

希望这可以帮助...


Ism*_*ren 1

这将检查 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)

  • JSON (`[]`) 空 json 数组元素不等于 `NULL` 或 `' '` 所以这不起作用。 (7认同)