sql >> Databasteknik >  >> RDS >> Mysql

JSON_CONTAINS_PATH() Exempel i MySQL

I MySQL, JSON_CONTAINS_PATH() funktion testar om en angiven sökväg hittas i det givna JSON-dokumentet.

Om sökvägen hittas, JSON_CONTAINS_PATH() returnerar 1 , annars returnerar den 0 .

Syntax

Syntaxen ser ut så här:

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

Där json_doc är JSON-dokumentet, one_or_all är nyckelordet one eller all (för att ange om bara en sökväg behöver existera eller alla sökvägar måste finnas innan 1 returneras ), och path är den faktiska vägen.

Exempel 1 – Grundläggande användning

Här är ett exempel för att visa grundläggande användning.

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Sökvägen $.a finns i JSON-dokumentet, och därför är resultatet 1 . Vi använde one som det andra argumentet men i det här fallet skulle vi få samma resultat om vi hade angett all .

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Om vi ​​anger en sökväg som inte finns får vi 0 . Exempel:

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;

Resultat:

+--------+
| Result |
+--------+
|      0 |
+--------+

Exempel 2 – Flera sökvägar

I följande exempel specificerar vi två sökvägar.

I det första exemplet finns en väg men den andra inte. Men eftersom jag använder one som det andra argumentet är resultatet positivt (eftersom minst en av vägarna finns).

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Om vi ​​byter one till all vi får ett negativt resultat.

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;

Resultat:

+--------+
| Result |
+--------+
|      0 |
+--------+

Detta beror på att all nyckelordet kräver att alla sökvägar måste finnas i JSON-dokumentet innan det returnerar en 1 .

Exempel 3 – Punktnotation

Du kan använda punktnotation för att indikera specifika sökvägar i JSON-dokumentet.

SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Exempel 4 – Arrayer

Här är ett par array-exempel.

Det första exemplet ger ett positivt resultat.

SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Nästa exempel returnerar ett negativt resultat.

SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;

Resultat:

+--------+
| Result |
+--------+
|      0 |
+--------+

Detta returnerar negativt eftersom matriser använder nollbaserad numrering. Därför sökvägen $.c[3] representerar det fjärde elementet, men arrayen innehåller bara tre element.


  1. SQL Server SP - Pass parameter för IN array lista?

  2. SCD typ 4

  3. Sql Server int vs nvarchar jämförelse på prestanda?

  4. Använder pyspark för att ansluta till PostgreSQL