メインコンテンツまでスキップ
バージョン: Latest-3.4

JSON 演算子

StarRocks は、次の JSON 比較演算子をサポートしています: <, <=, >, >=, =, および !=。これらの演算子を使用して JSON データをクエリできます。ただし、StarRocks では IN を使用して JSON データをクエリすることはできません。

  • 演算子のオペランドは両方とも JSON 値でなければなりません。

  • 演算子のオペランドの一方が JSON 値で、もう一方が JSON 値でない場合、JSON 値でないオペランドは算術演算中に JSON 値に変換されます。変換ルールの詳細については、CAST を参照してください。

算術ルール

JSON 演算子は次の算術ルールに従います:

  • 演算子のオペランドが同じデータ型の JSON 値である場合:
    • 両方のオペランドが NUMBER、STRING、BOOLEAN などの基本データ型の JSON 値である場合、演算子は基本データ型の算術ルールに従って算術演算を行います。

注意: 両方のオペランドが数値であるが、一方が DOUBLE 値で他方が INT 値である場合、演算子は INT 値を DOUBLE 値に変換します。

  • 両方のオペランドが OBJECT や ARRAY などの複合データ型の JSON 値である場合、演算子は最初のオペランドのキーの順序に基づいて辞書順にオペランドのキーをソートし、オペランド間のキーの値を比較します。

例 1:

最初のオペランドは {"a": 1, "c": 2} で、2 番目のオペランドは {"b": 1, "a": 2} です。この例では、演算子はオペランド間のキー a の値を比較します。最初のオペランドのキー a の値は 1 であり、2 番目のオペランドのキー a の値は 2 です。値 1 は値 2 より大きいです。したがって、演算子は最初のオペランド {"a": 1, "c": 2} が 2 番目のオペランド {"b": 1, "a": 2} より小さいと結論付けます。

mysql> SELECT PARSE_JSON('{"a": 1, "c": 2}') < PARSE_JSON('{"b": 1, "a": 2} ');

-> 1

例 2:

最初のオペランドは {"a": 1, "c": 2} で、2 番目のオペランドは {"b": 1, "a": 1} です。この例では、演算子はまずオペランド間のキー a の値を比較します。オペランドのキー a の値は両方とも 1 です。次に、演算子はオペランド間のキー c の値を比較します。2 番目のオペランドにはキー c が含まれていません。したがって、演算子は最初のオペランド {"a": 1, "c": 2} が 2 番目のオペランド {"b": 1, "a": 1} より大きいと結論付けます。

mysql> SELECT PARSE_JSON('{"a": 1, "c": 2}') < PARSE_JSON('{"b": 1, "a": 1}');

-> 0
  • 演算子のオペランドが異なるデータ型の JSON 値である場合、演算子は次の算術ルールに従ってオペランドを比較します: NULL < BOOLEAN < ARRAY < OBJECT < DOUBLE < INT < STRING。
mysql> SELECT PARSE_JSON('"a"') < PARSE_JSON('{"a": 1, "c": 2}');

-> 0