MySQLでは、JSON_CONTAINS()
関数は、指定された値が指定されたJSONドキュメント、またはオプションでドキュメント内の指定されたパスにあるかどうかをテストします。
値が見つかった場合は、JSON_CONTAINS()
1
を返します 、それ以外の場合は、0
を返します 。
構文
構文は次のようになります:
JSON_CONTAINS(target, candidate[, path])
この関数は1
を返します または0
特定のcandidate
かどうかによって異なります JSONドキュメントはtarget
に含まれています JSONドキュメント、または-path
の場合 引数が指定されました—候補がターゲット内の特定のパスで見つかったかどうか。
例1–2つの引数
パスを指定せずに(つまり、2つの引数のみを提供して)基本的な使用法を示す例を次に示します。
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
2番目の引数を中括弧で囲んでいることに注意してください。これらは、有効なJSONにするために必要です。中括弧を省略すると、エラーが発生します:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
結果:
ERROR 3141 (22032): Invalid JSON text in argument 2 to function json_contains: "The document root must not be followed by other values." at position 3.
例2–3つの引数
この例では、最初の引数で2番目の引数を見つけるための特定のパスを示すために、3番目の引数を追加します。
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
この場合、2番目の引数は、3番目の引数で指定されたパスの最初の引数で見つかりました。
見つからなかった場合は、次のようになります。
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
結果:
+--------+ | Result | +--------+ | 0 | +--------+
例3–ドット表記
ドット表記を使用して、JSONドキュメント内の特定のパスを示すことができます。
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+