MySQL 8.0.21 JSON_VALUE() 介绍

MySQL 8.0.21发布了,其中一个新特性是JSON_VALUE()函数。主要的动机是简化JSON数据的索引创建,但是还有更多的原因。

JSON_VALUE()在JSON数据中查找指定的标量JSON值,并将其作为SQL值返回。

例子,我将使用mysql_x示例数据库数据作为示例。让我们从life expectancy数据开始。

SELECT JSON_EXTRACT(doc, "$.demographics.LifeExpectancy") AS raw 
FROM countryinfo 
LIMIT 4;
+--------------------+
| raw                |
+--------------------+
| 78.4000015258789   |
| 45.900001525878906 |
| 38.29999923706055  |
| 76.0999984741211   |
+--------------------+

这是一个很棒的信息,但是用眼睛看起来不是那么舒服

我们可以使用JSON_VALUE()使它对我们看起来说更容易一些

SELECT 
JSON_VALUE(doc, "$.demographics.LifeExpectancy" RETURNING DECIMAL(6,2)) AS trimmed FROM countryinfo 
LIMIT 4;
+---------+
| trimmed |
+---------+
|   78.40 |
|   45.90 |
|   38.30 |
|   76.10 |
+---------+

它在WHERE子句中非常有用。在本例中没有RETURNING子句。

SELECT doc->"$.Name" 
FROM countryinfo 
WHERE JSON_VALUE(doc, "$.demographics.LifeExpectancy" 
     RETURNING DECIMAL(6,3)) > 80.1;
+---------------+
| doc->"$.Name" |
+---------------+
| "Andorra"     |
| "Japan"       |
| "Macao"       |
| "San Marino"  |
+---------------+

可选的RETURN子句将您的数据转换为FLOAT、DOUBLE、DECIMAL、SIGNED、
UNSIGNED, DATE, TIME, DATETIME, CHAR或JSON, 甚至还有on empty和on error子句。

SELECT JSON_VALUE('{firstname:"John"}', '$.lastname'               
        DEFAULT 'No last name found' ON ERROR) AS "Last Name";
+--------------------+
| Last Name          |
+--------------------+
| No last name found |
+--------------------+          

当然,它可以用来帮助定义索引。

CREATE TABLE xdemo (j JSON,
 x INTEGER,  
 key((json_value(j, '$.id'))) 
);

翻译来源:https://elephantdolphin.blogspot.com/2020/07/jsonvalue-now-in-mysql-8021.html

上一篇:一文详解PolarDB披荆斩棘的“秘密武器”


下一篇:400倍加速, PolarDB HTAP实时数据分析技术解密