メインコンテンツまでスキップ

JSON operators

JSON演算子

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

  • 演算子のオペランドは、いずれもJSON値である必要があります。

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

演算のルール

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

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

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

  • 両方のオペランドがオブジェクトや配列などの複合データ型の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
  • 演算子のオペランドが2つの異なるデータ型のJSON値である場合、演算子は以下の演算ルールに従ってオペランドを比較します:NULL < BOOLEAN < ARRAY < OBJECT < DOUBLE < INT < STRING.
mysql> SELECT PARSE_JSON('"a"') < PARSE_JSON('{"a": 1, "c": 2}');

-> 0