跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

比较谓词

比较谓词比较两个值,并在比较为真时返回true,为假时返回false。在任一值为null时,返回null。

语法

comparison_predicate
comparison_predicand comp_op comparison_predicand
comp_op
= <> < > <= >=

comparison_predicate ::=
    comparison_predicand comp_op comparison_predicand

comp_op ::= '=' | '<>'  | '<' | '>' | '<=' | '>='       

参数

comparison_predicand

与另一个值进行比较的值。

进行比较的值必须是相同的值类型;否则,返回错误NR002,表示未定义的函数。

comp_op

用于比较两个值的运算符。

不同的值类型,可使用的运算符也不同。以下表列出了每种值类型可用的运算符:

值类型 运算符 描述
数值 =, <>, <, >, <=, >= 比较遵循数学规则。
字符串值 =, <>, <, >, <=, >= 比较基于字节的字典序。
布尔值 =, <>, <, >, <=, >= 比较遵循true大于false的规则。
NULL 值 =, <>, <, >, <=, >= 任何与null值的比较都返回null。
时间点值 =, <>, <, >, <=, >= 比较基于时间顺序。
时间段值 =, <>, <, >, <=, >= 比较基于时间段长短。
列表值 =, <> 比较两个列表的元素是否相同。如果两个列表具有相同顺序的相同元素,则比较返回true,否则返回false。
集合值 =, <> 比较两个集合的元素是否相同。如果两个集合具有相同元素,则比较返回true,否则返回false。
映射值 =, <> 比较两个映射的键值对是否相同。如果两个映射具有相同的键值对,则比较返回true,否则返回false。
记录值 =, <> 比较两个记录的字段名和值是否相同。如果两个记录具有相同字段和相同字段值,则比较返回true,否则返回false。
图元素值 =, <> 比较两个图元素是否相同。如果两个图元素相同,则比较返回true,否则返回false。
路径值 =, <> 比较两个路径是否相同。如果两个路径相同,则比较返回true,否则返回false。
地理空间值 =, <> 比较两个地理空间值是否相同。如果两个地理空间值相同,则比较返回true,否则返回false。

示例

以下示例基于示例数据集。

比较字符串

LET l1= 'w55', l2='e34' RETURN l1 > l2 AS a

返回:

+------+
| a    |
+------+
| true |
+------+

比较布尔值

RETURN (2>1) > (1>2) AS a, (2>1) <= (3>2) AS b 

返回:

+------+------+
| a    | b    |
+------+------+
| true | true |
+------+------+

比较 NULL 值

'''
RETURN null > (1>2) AS a,
       null >= 1 AS b,
       null < "String" AS c,
       null = LIST[1,2,3] AS d,
       null < local_datetime("2012-03-04T05:06:07.0890") AS e,
       null <> RECORD{} AS f
'''

返回:

+------+------+------+------+------+------+
| a    | b    | c    | d    | e    | f    |
+------+------+------+------+------+------+
| null | null | null | null | null | null |
+------+------+------+------+------+------+

比较列表值

LET l1= LIST[1,2,3], l2=LIST[1,2,3.5] RETURN l1 = l2 AS a

返回:

+-------+
| a     |
+-------+
| false |
+-------+

比较时间点值

LET t1=local_datetime("2012-03-04T05:06:07.0890"), t2=local_datetime("2012-03-02T05:06:07.0") RETURN t1 > t2 AS a

返回:

+------+
| a    |
+------+
| true |
+------+

比较时间段值

LET d1=duration({years:1, months:2}), d2=duration({years:1, months:3}) RETURN d1 < d2 AS a

返回:

+------+
| a    |
+------+
| true |
+------+

比较记录值

LET r1 = {a:1, b:true, c:"str"}, r2 = {a:1, c:"str", b:true} RETURN r1 = r2 AS a

返回:

+------+
| a    |
+------+
| true |
+------+

比较图元素值

'''
USE movie 
MATCH (v1@Director)->(m1), (v2@Director)->(m2) 
WHERE m1.name = "Saw III" AND m2.name = "Saw IV" 
RETURN v1 = v2 AS a
'''

上述语句选择了电影"Saw III"和"Saw IV"的导演,并比较他们是否是同一个人。

返回:

+------+
| a    |
+------+
| true |
+------+

比较路径值

'''
USE movie 
MATCH p1 = (m1@Movie)<-(u1@`User`),
      p2 = (m2@Movie)<-(u2@`User`) 
WHERE u1.id = u2.id 
RETURN p1 = p2 AS a, m1.name, m2.name 
LIMIT 5
'''

上述语句选择了从相同用户开始并以电影结束的路径,并比较路径是否相同。

返回:

+-------+--------------------------------------------------------+--------------------------------------------------------+
| a     | m1.name                                                | m2.name                                                |
+-------+--------------------------------------------------------+--------------------------------------------------------+
| false | Simpsons                                               | Pirates of the Caribbean: The Curse of the Black Pearl |
| false | Simpsons                                               | Harry Potter and the Philosopher's Stone               |
| false | Simpsons                                               | Pi                                                     |
| false | Pirates of the Caribbean: The Curse of the Black Pearl | Simpsons                                               |
| false | Pirates of the Caribbean: The Curse of the Black Pearl | Harry Potter and the Philosopher's Stone               |
+-------+--------------------------------------------------------+--------------------------------------------------------+

比较地理空间值

'''
LET l1= ST_GeogFromText ('POINT (34.0522 -18.2437) '),
l2=ST_GeogFromText ('POINT (34.0522 -18.2437) ') 
RETURN l1 = l2 AS a, l1 <> l2 AS b
'''

返回:

+------+-------+
| a    | b     |
+------+-------+
| true | false |
+------+-------+

比较集合值

LET l1 = SET {1,2,3}, l2 = SET {1,2,3.5} RETURN l1 = l2 AS a, l1 <> l2 AS b

返回:

+-------+------+
| a     | b    |
+-------+------+
| false | true |
+-------+------+

比较映射值

LET m1 = MAP {'a':1, 'b':2}, m2 = MAP {'b':2, 'a':1, 'b': 3} RETURN m1 = m2 AS a, m1 <> m2 AS b

返回:

+------+-------+
| a    | b     |
+------+-------+
| true | false |
+------+-------+