JSON 运算符
StarRocks 支持以下 JSON 比较运算符:<
、<=
、>
、>=
、=
和 !=
。 您可以使用这些运算符来查询 JSON 数据。 但是,StarRocks 不允许您使用 IN
来查询 JSON 数据。
-
运算符的操作数必须都是 JSON 值。
-
如果运算符的一个操作数是 JSON 值,而另一个操作数不是,则在算术运算期间,非 JSON 值的操作数将转换为 JSON 值。 有关转换规则的更多信息,请参见 CAST。
算术规则
JSON 运算符遵循以下算术规则
- 当运算符的操作数是相同数据类型的 JSON 值时
- 如果两个操作数都是基本数据类型的 JSON 值,例如 NUMBER、STRING 或 BOOLEAN,则运算符执行算术运算,运算规则遵循基本数据类型的算术规则。
注意:如果两个操作数都是数字,但一个是 DOUBLE 值,另一个是 INT 值,则运算符将 INT 值转换为 DOUBLE 值。
- 如果两个操作数都是复合数据类型的 JSON 值,例如 OBJECT 或 ARRAY,则运算符按字典顺序对操作数中的键进行排序,排序基于第一个操作数中的键的顺序,然后比较操作数之间键的值。
示例 1
第一个操作数为 {"a": 1, "c": 2}
,第二个操作数为 {"b": 1, "a": 2}
。 在此示例中,运算符比较操作数之间键 a
的值。 第一个操作数中键 a
的值为 1
,而第二个操作数中键 a
的值为 2
。 值 1
大于值 2
。 因此,运算符得出结论,第一个操作数 {"a": 1, "c": 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}
,第二个操作数为 {"b": 1, "a": 1}
。 在此示例中,运算符首先比较操作数之间键 a
的值。 操作数中键 a
的值均为 1
。 然后,运算符比较操作数中键 c
的值。 第二个操作数不包含键 c
。 因此,运算符得出结论,第一个操作数 {"a": 1, "c": 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