Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/predicates/comparison/ Documentation version: v5.3.2 # 比较谓词 比较谓词比较两个值,并在比较为真时返回`true`,为假时返回`false`。在任一值为`null`时,返回`null`。 ## 语法 语法图源码 comparison_predicate 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`。 ## 示例 以下示例基于[示例数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/)。 ### 比较字符串 ```` 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 | +------+-------+ ````