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

Nhà điều hành

Trong SQLite, ->> toán tử trích xuất một thành phần con từ tài liệu JSON và trả về một biểu diễn SQL của thành phần con đó.

->> toán tử lần đầu tiên được giới thiệu trong phiên bản SQLite 3.38.0 (phát hành vào ngày 22 tháng 2 năm 2022).

Cú pháp

Cú pháp như sau:

json ->> path

Ở đâu json là tài liệu JSON và path là đường dẫn đến thành phần con mà chúng tôi muốn trích xuất từ ​​nó.

Vì vậy, chúng tôi cung cấp một tài liệu JSON ở bên trái của toán tử và chúng tôi chỉ định đường dẫn chúng tôi muốn trích xuất ở bên phải của nó.

->> toán tử luôn trả về một biểu diễn SQL của thành phần con được chỉ định. Để trả về biểu diễn JSON, hãy sử dụng -> thay vào đó là toán tử.

Ví dụ

Dưới đây là một ví dụ đơn giản để chứng minh cách ->> nhà điều hành hoạt động:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$';

Kết quả:

{"name":"Wag","type":"Dog"}

Trong trường hợp này, tôi đã chỉ định một đường dẫn là '$' trả về toàn bộ tài liệu.

Hãy chỉ định một đường dẫn khác:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type';

Kết quả:

Dog

Chúng ta cũng có thể bỏ qua hoàn toàn ký hiệu đô la và dấu dừng hoàn toàn, như sau:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'type';

Kết quả:

Dog

Đây là tài liệu JSON lớn hơn:

SELECT '[
        { 
        "user" : "Spike",
        "age" : 30,
        "scores" : [ 9, 7, 3 ]
        },
        { 
        "user" : "Faye",
        "age" : 25,
        "scores" : [ 90, 87, 93 ]
        },
        { 
        "user" : "Jet",
        "age" : 40,
        "scores" : [ 50, 38, 67 ]
        }
        ]' ->> '$[0]';

Kết quả:

{"user":"Spike","age":30,"scores":[9,7,3]}

Trong SQLite, mảng dựa trên 0 và do đó chỉ định [0] trả về phần tử mảng đầu tiên.

Nếu chúng tôi chỉ muốn nhận được điểm số của người dùng đó, chúng tôi có thể làm điều này:

SELECT '[
        { 
        "user" : "Spike",
        "age" : 30,
        "scores" : [ 9, 7, 3 ]
        },
        { 
        "user" : "Faye",
        "age" : 25,
        "scores" : [ 90, 87, 93 ]
        },
        { 
        "user" : "Jet",
        "age" : 40,
        "scores" : [ 50, 38, 67 ]
        }
        ]' ->> '$[0].scores';

Kết quả:

[9,7,3]

Chúng tôi có thể đi sâu hơn nữa và trích ra một số điểm cụ thể:

SELECT '[
        { 
        "user" : "Spike",
        "age" : 30,
        "scores" : [ 9, 7, 3 ]
        },
        { 
        "user" : "Faye",
        "age" : 25,
        "scores" : [ 90, 87, 93 ]
        },
        { 
        "user" : "Jet",
        "age" : 40,
        "scores" : [ 50, 38, 67 ]
        }
        ]' ->> '$[0].scores[1]';

Kết quả:

7

Đường dẫn không tồn tại

Nếu đường dẫn không tồn tại trong JSON, giá trị null được trả về:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.age';

Kết quả:

null

Lưu ý rằng Trong SQLite, bạn có thể sử dụng .nullvalue để chỉ định một chuỗi xuất ra bất cứ khi nào giá trị null được trả về. Trong trường hợp của tôi, trước đó tôi đã chạy lệnh sau:

.nullvalue null

Điều đó chỉ định rằng văn bản null sẽ được xuất ra bất cứ khi nào giá trị null được trả về. Đó là lý do tại sao ví dụ trên xuất ra văn bản null . Nếu tôi không làm điều này, kết quả có thể bị trống.

JSON không hợp lệ

Nếu đối số đầu tiên không phải là JSON hợp lệ, thì sẽ xảy ra lỗi:

SELECT '{ "name" }' ->> '$';

Kết quả:

Runtime error: malformed JSON

Đường dẫn không hợp lệ

Và nếu đối số thứ hai không phải là một đường dẫn hợp lệ, thì sẽ xảy ra lỗi:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$name';

Kết quả:

Runtime error: JSON path error near 'name'

Trong trường hợp này, tôi đã quên bao gồm điểm dừng đầy đủ (. ) giữa ký hiệu đô la ($ ) và name .

Tuy nhiên, như đã đề cập, có thể bỏ qua hoàn toàn ký hiệu đô la và dấu dừng hoàn toàn:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'name';

Kết quả:

Wag

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiển thị kết quả truy vấn SQLite bằng đầu ra dọc

  2. Cách hoạt động của SQLite Ltrim ()

  3. Hiểu hướng dẫn về cách lưu dữ liệu trong cơ sở dữ liệu SQL của Android.com

  4. làm thế nào để thêm bộ điều hợp tùy chỉnh vào hoạt động để làm cho danh sách xuất hiện trong hoạt động?

  5. SQLite LIKE