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