json_extract(js_fy,CONCAT('$."',dm,'"'))
时间: 2024-01-02 07:04:36 浏览: 29
这是一个MySQL函数,用于从一个JSON类型的字符串中提取指定键的值。其中,js_fy是存储JSON字符串的字段名称,dm是需要提取的JSON键名。函数的作用是将JSON字符串中的指定键名的值提取出来。具体而言,CONCAT('$."',dm,'"')是将键名dm加上双引号,并在前面加上'$.',构成一个JSON路径表达式,用于在JSON字符串中定位到指定的键。函数返回指定键的值,如果键不存在则返回NULL。
相关问题
JSON_EXTRACT 如何动态如何进行$.参数拼写
在使用 JSON_EXTRACT 函数时,可以使用 CONCAT 和其他字符串函数动态构建 JSON 路径,以便更灵活地进行 $. 参数拼写。例如,假设我们有以下 JSON 数据:
```
{
"name": "John",
"age": 30,
"address": {
"city": "New York",
"state": "NY",
"zip": "10001"
}
}
```
如果要提取地址的城市,可以使用以下查询:
```
SELECT JSON_EXTRACT(json_data, CONCAT('$.address.', 'city')) AS city FROM my_table;
```
这里使用 CONCAT 函数将字符串 '$.address.' 和 'city' 连接起来,形成完整的 JSON 路径 'address.city',作为 JSON_EXTRACT 函数的第二个参数传入。这样就可以动态指定 JSON 路径中的参数拼写。
简化sql: select JSON_UNQUOTE(JSON_EXTRACT(woo.attachment, '$.transformerObjList')) as transformerObjList from workflow_order woo where workflow_order_id in ( select c.workflow_order_id from ( select concat( JSON_UNQUOTE(JSON_EXTRACT(wo.attachment, '$.province')), JSON_UNQUOTE(JSON_EXTRACT(wo.attachment, '$.city')), JSON_UNQUOTE(JSON_EXTRACT(wo.attachment, '$.county')), JSON_UNQUOTE(JSON_EXTRACT(wo.attachment, '$.town')), JSON_UNQUOTE(JSON_EXTRACT(wo.attachment, '$.village')) ) as address , JSON_UNQUOTE(JSON_EXTRACT(wo.attachment, '$.dataType')) as dataType ,wo.workflow_order_id from workflow_order as wo ) as c where c.dataType = 1587434126787240000 and c.address = '江苏省无锡市宜兴市A镇8村'
简化后的 SQL 查询语句如下:
```
SELECT JSON_UNQUOTE(JSON_EXTRACT(attachment, '$.transformerObjList')) AS transformerObjList
FROM workflow_order
WHERE workflow_order_id IN (
SELECT workflow_order_id
FROM (
SELECT CONCAT(
JSON_UNQUOTE(JSON_EXTRACT(attachment, '$.province')),
JSON_UNQUOTE(JSON_EXTRACT(attachment, '$.city')),
JSON_UNQUOTE(JSON_EXTRACT(attachment, '$.county')),
JSON_UNQUOTE(JSON_EXTRACT(attachment, '$.town')),
JSON_UNQUOTE(JSON_EXTRACT(attachment, '$.village'))
) AS address,
JSON_UNQUOTE(JSON_EXTRACT(attachment, '$.dataType')) AS dataType,
workflow_order_id
FROM workflow_order
) AS c
WHERE c.dataType = 1587434126787240000 AND c.address = '江苏省无锡市宜兴市A镇8村'
)
```