最近更新时间:2025-11-11 16:29:40
本章节介绍 Cypher 查询语言中常用的 操作符(Operators),包括字符串、数值、布尔及集合等类型的运算与匹配规则。操作符用于在图查询中执行条件判断、数据筛选、字符串模式匹配及算术逻辑运算,是构建复杂查询语句的重要组成部分。
Cypher 提供多种字符串操作符,用于对字符串属性执行模式匹配、拼接、大小写转换等操作。
首先,创建示例数据:
SELECT * FROM cypher('graph_name', $$
CREATE (:Person {name: 'John'}),
(:Person {name: 'Jeff'}),
(:Person {name: 'Joan'}),
(:Person {name: 'Bill'})
$$) AS (result agtype);执行后,将在图中创建四个带有 Person 标签的节点,每个节点包含一个字符串属性 name。
使用 STARTS WITH 操作符可以对字符串执行区分大小写的前缀搜索。该操作符常用于匹配以特定字符串开头的属性值。
SELECT * FROM cypher('graph_name', $$
MATCH (v:Person)
WHERE v.name STARTS WITH "J"
RETURN v.name
$$) AS (names agtype);查询结果:
names |
John |
Jeff |
Joan |
3 rows |
对字符串执行区分大小写的包含搜索。
SELECT * FROM cypher('graph_name', $$
MATCH (v:Person)
WHERE v.name CONTAINS "o"
RETURN v.name
$$) AS (names agtype);查询结果:
names |
John |
Joan |
2 rows |
对字符串执行区分大小写的后缀搜索。
SELECT * FROM cypher('graph_name', $$
MATCH (v:Person)
WHERE v.name ENDS WITH "n"
RETURN v.name
$$) AS (names agtype);查询结果:
names |
John |
Joan |
2 rows |
AGE 支持使用 =~ 操作符使用 POSIX 正则表达式。默认情况下 =~ 是区分大小写的。
当没有给出特殊字符时,=~ 操作符的行为类似于 = 操作符。
SELECT * FROM cypher('graph_name', $$
MATCH (v:Person)
WHERE v.name =~ 'John'
RETURN v.name
$$) AS (names agtype);结果
names |
John |
1 rows |
在字符串开头添加 (?i) 将使比较不区分大小写
SELECT * FROM cypher('graph_name', $$
MATCH (v:Person)
WHERE v.name =~ '(?i)JoHn'
RETURN v.name
$$) AS (names agtype);names |
John |
1 rows |
. 操作符作为通配符匹配任何单个字符。
SELECT * FROM cypher('graph_name', $$
MATCH (v:Person)
WHERE v.name =~ 'Jo.n'
RETURN v.name
$$) AS (names agtype);names |
John |
Joan |
2 rows |
字符后的 * 通配符将匹配前一个字符的 0 个或多个
SELECT * FROM cypher('graph_name', $$
MATCH (v:Person)
WHERE v.name =~ 'Johz*n'
RETURN v.name
$$) AS (names agtype);names |
John |
1 rows |
操作符匹配前一个字符的 1 个或多个。
SELECT * FROM cypher('graph_name', $$
MATCH (v:Person)
WHERE v.name =~ 'Bil+'
RETURN v.name
$$) AS (names agtype);返回结果:
names |
Bill |
1 rows |
您可以一起使用 . 和 * 通配符来表示字符串的其余部分。
SELECT * FROM cypher('graph_name', $$
MATCH (v:Person)
WHERE v.name =~ 'J.*'
RETURN v.name
$$) AS (names agtype);names |
John |
Jeff |
Joan |
3 rows |
Cypher 查询语言支持多种操作符,不同操作符具有不同的优先级(Precedence)。
当表达式中包含多个操作符时,系统将按照优先级顺序依次执行。
下表列出了各类操作符及其说明,优先级从高到低排列。
优先级 | 操作符 | 描述 |
1 |
| 属性访问(Property Access)。 |
2 |
| 映射(Map)和列表(List)下标访问。 |
| 函数调用(Function Call)。 | |
3 |
| 字符串前缀匹配(区分大小写)。 |
| 字符串后缀匹配(区分大小写)。 | |
| 字符串包含匹配(区分大小写)。 | |
| 正则表达式匹配。 | |
4 |
| 一元负号(Unary Minus)。 |
5 |
| 判断元素是否存在于列表中。 |
| 判断值是否为 NULL。 | |
| 判断值是否非 NULL。 | |
6 |
| 指数运算(Exponentiation)。 |
7 |
| 乘法、除法、取余。 |
8 |
| 加法与减法。 |
9 |
| 相等与不等判断( |
| 小于与小于等于。 | |
| 大于与大于等于。 | |
10 |
| 逻辑非(Logical NOT)。 |
11 |
| 逻辑与(Logical AND)。 |
12 |
| 逻辑或(Logical OR)。 |
当多个操作符具有相同优先级时,表达式从左到右依次求值。
可使用括号 () 明确运算顺序,以提升查询的可读性与可维护性。
纯净模式
