代码之家  ›  专栏  ›  技术社区  ›  SchoolforDesign

为什么MySQL JSON_EXTRACT在WHERE条件下不起作用?

  •  1
  • SchoolforDesign  · 技术社区  · 2 年前

    我试试这个:

    SELECT * FROM `gass_pedan` WHERE json_extract(`cars_info`, '$.driver_id') = 4;
    

    上述语法中哪个错误?,我也在使用:

    SELECT * FROM `gass_pedan` WHERE JSON_CONTAINS(`cars_info`, '4', '$.driver_id')
    

    这是我的JSON:

    {"mxrid":2,"mxrno":"11","driver_id":"4","drname":"carl","cartype":"mixer"}
    

    这是我的服务器信息:
    [![在此处输入图像描述][1]][1]
    #3141 - Invalid JSON text in argument 1 to function json_extract: "The document is empty." at position 0.
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   Barmar    2 年前

    如果你有空 cars_info 值,您需要避免调用 JSON_EXTRACT() 关于这些价值观。它将忽略NULL值,但空字符串会导致错误。

    SELECT * 
    FROM `gass_pedan` 
    WHERE `cars_info` != '' AND json_unquote(json_extract(`cars_info`, '$.driver_id')) = 4;
    

    您还需要使用 json_unquote() 否则,它将返回一个带有文字的字符串 " 在它周围,它不等于这个数字。您可以使用 ->> 简写 JSON_UNQUOTE(JSON_EXTRACT(...))

    SELECT * 
    FROM `gass_pedan` 
    WHERE `cars_info` != '' AND `cars_info`->>'$.driver_id' = 4;