跳到主要内容
版本: 最新版本-3.5

JSON 运算符

StarRocks 支持以下 JSON 比较运算符:<<=>>==!=。 您可以使用这些运算符来查询 JSON 数据。 但是,StarRocks 不允许您使用 IN 来查询 JSON 数据。

  • 运算符的操作数必须都是 JSON 值。

  • 如果运算符的一个操作数是 JSON 值,而另一个操作数不是,则在算术运算期间,非 JSON 值的操作数将转换为 JSON 值。 有关转换规则的更多信息,请参见 CAST

提示

所有 JSON 函数和运算符都列在导航栏和概述页面

通过生成列加速您的查询

算术规则

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