MariaDBでは、JSON_EXISTS() は、JSONドキュメントの指定されたパスに値が存在するかどうかを確認できる組み込み関数です。
JSONドキュメントを引数として受け入れ、1を返します。 パスが見つかった場合、および0 そうでない場合。
MariaDBのドキュメントには、関数は「指定されたJSON値が指定されたデータに存在するかどうかを判断する」と記載されています。ただし、関数は実際には特定の値をチェックしているようには見えません。指定されたパスかどうかを決定すると言った方がおそらく正確です。 存在するか、指定されたパスに値が存在すること。
実際の値を確認するため 存在する場合は、JSON_CONTAINS()を使用できます 機能。
構文
構文は次のようになります:
JSON_EXISTS(json_doc, path)
json_docの場所 JSONドキュメントとpath 見つけるためのパスです。
例
実例を示します。
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name'); 結果:
+--------------------------------------------+
| JSON_EXISTS('{ "name": "Wag" }', '$.name') |
+--------------------------------------------+
| 1 |
+--------------------------------------------+
この場合、パスが見つかり、結果は1になります。 。
パスが見つからない場合、結果は0になります 、このように:
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type'); 結果:
+--------------------------------------------+
| JSON_EXISTS('{ "name": "Wag" }', '$.type') |
+--------------------------------------------+
| 0 |
+--------------------------------------------+ 配列
この例では、配列の特定のインデックスに要素が存在するかどうかを確認します。
SELECT JSON_EXISTS(
'{
"name": "Wag",
"scores": [ 10, 8, 7 ]
}',
"$.scores[2]"
) AS Result; 結果:
+--------+ | Result | +--------+ | 1 | +--------+
インデックスが配列に存在しない場合は、次のようになります。
SELECT JSON_EXISTS(
'{
"name": "Wag",
"scores": [ 10, 8, 7 ]
}',
'$.scores[3]'
) AS Result; 結果:
+--------+ | Result | +--------+ | 0 | +--------+
より大きなJSONドキュメント
これは、少し大きいJSONドキュメントを使用する例です。ここでは、ネストのいくつかのレベル内に存在するキーを確認します。
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_EXISTS(
@json_document,
'$.details.awards.Sumo 2020'
) AS Result; 結果:
+--------+ | Result | +--------+ | 1 | +--------+
ヌル引数
引数のいずれかがNULLの場合 、結果はNULLです :
SELECT
JSON_EXISTS(null, '$.a'),
JSON_EXISTS('{ "a": 1 }', null); 結果:
+--------------------------+---------------------------------+
| JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a": 1 }', null) |
+--------------------------+---------------------------------+
| NULL | NULL |
+--------------------------+---------------------------------+ 無効なJSON
無効なJSONを渡すと、NULLになります :
SELECT JSON_EXISTS('{1}', '$.a'); 結果:
+---------------------------+
| JSON_EXISTS('{1}', '$.a') |
+---------------------------+
| NULL |
+---------------------------+ パラメータカウントが正しくありません
引数を指定しないとエラーが発生します:
SELECT JSON_EXISTS(); 結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXISTS'
提供する引数が多すぎる場合も同じです:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3); 結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXISTS'