运算符

字符串特定比较运算符

数据准备

SELECT * FROM cypher('graph_name', $$
CREATE (:Person {name: 'John'}),
       (:Person {name: 'Jeff'}),
       (:Person {name: 'Joan'}),
       (:Person {name: 'Bill'})
$$) AS (result agtype);

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

Contains

对字符串执行区分大小写的包含搜索。

SELECT * FROM cypher('graph_name', $$
        MATCH (v:Person)
        WHERE v.name CONTAINS "o"
        RETURN v.name
$$) AS (names agtype);

结果:

names
"John"
"Joan"
2 rows

Ends With

对字符串执行区分大小写的后缀搜索。

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 row

不区分大小写搜索

在字符串开头添加 (?i) 将使比较不区分大小写。

SELECT * FROM cypher('graph_name', $$
        MATCH (v:Person)
        WHERE v.name =~ '(?i)JoHn'
        RETURN v.name
$$) AS (names agtype);

结果:

names
"John"
1 row

. 通配符

. 运算符作为通配符匹配任何单个字符。

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 row

+ 运算符

+ 运算符匹配 1 个或多个前一个字符。

SELECT * FROM cypher('graph_name', $$
        MATCH (v:Person)
        WHERE v.name =~ 'Bil+'
        RETURN v.name
$$) AS (names agtype);

结果:

names
"Bill"
1 row

. 和 * 通配符组合使用

可以将 .* 通配符组合使用来表示字符串的其余部分。

SELECT * FROM cypher('graph_name', $$
        MATCH (v:Person)
        WHERE v.name =~ 'J.*'
        RETURN v.name
$$) AS (names agtype);

结果:

names
"John"
"Jeff"
"Joan"
3 rows

运算符优先级

AGE 中的运算符优先级如下所示:

优先级 运算符 说明
1 . 属性访问
2 [] Map 和 List 下标
() 函数调用
3 STARTS WITH 字符串区分大小写前缀搜索
ENDS WITH 字符串区分大小写后缀搜索
CONTAINS 字符串区分大小写包含搜索
=~ 正则表达式字符串匹配
4 - 一元负号
5 IN 检查元素是否存在于列表中
IS NULL 检查值是否为 NULL
IS NOT NULL 检查值是否不为 NULL
6 ^ 幂运算
7 * / % 乘法、除法和取余
8 + - 加法和减法
9 = <> 关系运算 = 和 ≠
< <= 关系运算 < 和 ≤
> >= 关系运算 > 和 ≥
10 NOT 逻辑 NOT
11 AND 逻辑 AND
12 OR 逻辑 OR