if(STRCMP(oori.account_holder,'[]'),JSON_UNQUOTE(oori.account_holder->'$[]."nickName"'),'无') 挂账人,
时间: 2023-08-25 14:04:35 浏览: 101
根据你提供的信息,这个查询语句是从一个 JSON 字段中提取 "nickName" 值,并在该字段不为空的情况下返回该值,否则返回字符串 "无"。
但是,这个查询语句可能存在一个语法错误。在 MySQL 8.0 中,JSON_EXTRACT 函数用于从 JSON 字段中提取值。如果你正在使用 MySQL 8.0 或更高版本,则应该将 JSON_EXTRACT 函数用于从 JSON 字段中提取 "nickName" 值,而不是使用箭头运算符(->)。
因此,正确的查询语句应该是:
```sql
IF(STRCMP(oori.account_holder, '[]'), JSON_UNQUOTE(JSON_EXTRACT(oori.account_holder, '$[]."nickName"')), '无') AS 挂账人
```
这个查询语句将首先检查 "account_holder" 字段是否为空数组,如果不是,则使用 JSON_EXTRACT 函数从 "account_holder" 字段中提取 "nickName" 值,并使用 JSON_UNQUOTE 函数消除该值周围的双引号。如果 "account_holder" 字段是空数组,则返回字符串 "无"。
相关问题
IF(STRCMP(oori.account_holder, '[]'), JSON_UNQUOTE(JSON_EXTRACT(oori.account_holder, '$[]."nickName"')), '无') AS 挂账人,报错 Invalid JSON path expression. The error is around character position 2.
这个错误可能是由于 JSON 数据中缺少 "nickName" 字段或 "account_holder" 字段为空数组,导致 JSON_EXTRACT 函数无法从中提取值。
你可以尝试使用 JSON_VALID 函数验证 JSON 数据是否格式正确,例如:
```sql
SELECT JSON_VALID(oori.account_holder) FROM your_table;
```
此外,你可以使用 JSON_OBJECT 或 JSON_ARRAY 函数创建一个新的 JSON 对象或数组,这可以避免由于空值或缺少字段而导致的错误。例如:
```sql
IF(STRCMP(oori.account_holder, '[]'), JSON_UNQUOTE(JSON_EXTRACT(oori.account_holder, '$[]."nickName"')), '无') AS 挂账人,
-- 可以改写为 --
JSON_UNQUOTE(IFNULL(JSON_EXTRACT(oori.account_holder, '$[]."nickName"'), JSON_OBJECT())) AS 挂账人,
```
这个查询语句将首先使用 JSON_EXTRACT 函数从 "account_holder" 字段中提取 "nickName" 值。如果该值不存在,则使用 JSON_OBJECT 函数创建一个新的空 JSON 对象,并使用 IFNULL 函数将其作为默认值返回。最后,使用 JSON_UNQUOTE 函数消除该值周围的双引号。
希望这个新的查询语句可以帮助你解决问题。
阅读全文