sql >> データベース >  >> RDS >> Mysql

MySQLのJSON_CONTAINS()の例

    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 |
    +--------+
    

    1. SQLインジェクションからJDBCアプリケーションを保護する方法

    2. C#でSMOを使用してSQL Serverの利用可能なインスタンスを一覧表示するにはどうすればよいですか?

    3. postgresqlエラーPANIC:有効なチェックポイントレコードを見つけることができませんでした

    4. #1055-SELECTリストの式がGROUP BY句になく、集計されていない列が含まれています。これはsql_mode=only_full_group_byと互換性がありません。