MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

MariaDB JSON_REPLACE () Giải thích

Trong MariaDB, JSON_REPLACE() là một hàm tích hợp thay thế các giá trị hiện có trong tài liệu JSON và trả về kết quả.

Cú pháp

Cú pháp như sau:

JSON_REPLACE(json_doc, path, val[, path, val] ...)

Ví dụ

Đây là một ví dụ để chứng minh.

SET @json = '{ "name" : "Wag", "type" : "Cat" }';

SELECT JSON_REPLACE(@json, '$.type', 'Dog');

Kết quả:

+--------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Dog') |
+--------------------------------------+
| {"name": "Wag", "type": "Dog"}       |
+--------------------------------------+

Trong trường hợp này, tôi đã thay thế giá trị Cat với Dog .

Phần tử mảng

Để thay thế một phần tử mảng, hãy chỉ định chỉ mục của phần tử:

SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';

SELECT JSON_REPLACE(@json, '$.scores[1]', 7);

Kết quả:

+---------------------------------------+
| JSON_REPLACE(@json, '$.scores[1]', 7) |
+---------------------------------------+
| {"name": "Wag", "scores": [8, 7, 9]}  |
+---------------------------------------+

Trong trường hợp này, phần tử mảng thứ hai đã được thay thế bằng giá trị mới. Mảng dựa trên 0 và vì vậy $.scores[1] tham chiếu đến phần tử thứ hai trong mảng.

Nhiều đường dẫn

Cú pháp cho phép thay thế các giá trị ở nhiều đường dẫn bằng một lệnh gọi tới JSON_REPLACE() .

Khi cung cấp nhiều đường dẫn, chúng được đánh giá từ trái sang phải. Điều này có nghĩa là kết quả từ lần đánh giá trước đó được sử dụng làm giá trị cho lần tiếp theo.

Đầu tiên, đây là một ví dụ thay thế nhiều giá trị trong một tài liệu, dựa trên khóa của chúng:

SET @json = '
    { 
        "name" : "Flutter", 
        "type" : "Bird",
        "weight" : 10
    }
';

SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);

Kết quả:

+------------------------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) |
+------------------------------------------------------+
| {"name": "Flutter", "type": "Bat", "weight": 20}     |
+------------------------------------------------------+

Mỗi giá trị đã được thay thế như mong đợi.

Trong ví dụ tiếp theo, chúng tôi thay thế nhiều phần tử trong một mảng:

SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';

SELECT 
    JSON_REPLACE(
        @json, 
        '$.scores[2]', "a", 
        '$.scores[4]', "b"
    ) AS Result;

Kết quả:

+------------------------------------+
| Result                             |
+------------------------------------+
| {"scores": [0, 1, "a", 3, "b", 5]} |
+------------------------------------+

Đối số rỗng

Nếu json_doc hoặc bất kỳ path đối số là null , kết quả là NULL . Nhưng nếu giá trị value đối số là null , sau đó giá trị được thay thế thành null .

SELECT 
    JSON_REPLACE(null, '$.a', 1) AS a,
    JSON_REPLACE('{"a":1}', null, 1) AS b,
    JSON_REPLACE('{"a":1}', '$.a', null) AS c;

Kết quả:

+------+------+-------------+
| a    | b    | c           |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+

Trong ví dụ sau, một trong các đối số đường dẫn bị thiếu trong mỗi lệnh gọi tới JSON_REPLACE() . Điều này dẫn đến NULL được trả lại cho cả hai cuộc gọi:

SET @json = '{ "name" : "Wag", "type" : "Cat" }';

SELECT 
    JSON_REPLACE(@json, null, 'Bark', '$.type', 'Dog') AS a,
    JSON_REPLACE(@json, '$.name', 'Bark', null, 'Dog') AS b;

Kết quả:

+------+------+
| a    | b    |
+------+------+
| NULL | NULL |
+------+------+

Đếm tham số không chính xác

Đang gọi JSON_REPLACE() không có đối số dẫn đến lỗi:

SELECT JSON_REPLACE();

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'

Điều này cũng giống như vậy khi không truyền đủ đối số:

SELECT JSON_REPLACE('{"a":1}');

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'

Các chức năng tương tự

JSON_INSERT() hàm có thể chèn dữ liệu mới.

JSON_SET() chức năng có thể chèn dữ liệu mới và cập nhật dữ liệu hiện có. Vì vậy, JSON_SET() giống như JSON_INSERT()JSON_REPLACE() trong một chức năng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lấy tên ngày ngắn từ ngày trong MariaDB

  2. Cách SEC_TO_TIME () hoạt động trong MariaDB

  3. Cân bằng tải MariaDB MaxScale trên Docker:Triển khai:Phần một

  4. Cách UNCOMPRESS () hoạt động trong MariaDB

  5. Cách POSITION () hoạt động trong MariaDB