GQL 函数、运算符和谓词

使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息
适用于: ✅ Azure 数据资源管理器

本文列出了 GQL (图形查询语言)中支持的标量函数、运算符和谓词。

这些示例使用“创建图形”中的电影图G()并设置图形引用Person节点(、NameBorn节点(MovieTitleDescription、)YearACTED_IN / DIRECTED边缘()。Role

访问运算符

使用这些运算符从节点、边缘、映射、列表或路径读取属性或元素。

Operator Description
x.property 按名称访问节点、边缘或映射的属性。
x[i] 通过从零开始的位置或按键映射成员访问列表或路径元素。
match () limit 1 return [10, 20, 30][1] as byIndex, {a: 1, b: 2}.a as byDot, {a: 1, b: 2}['b'] as byKey
byIndex byDot byKey
20 1 2

字符串函数

功能 Description
LEFT(s, n) 的第一n个字符。s
RIGHT(s, n) 的上n一个字符。s
UPPER(s) 转换为 s 大写。
LOWER(s) 转换为 s 小写。
TRIM(s)BTRIM(s) 从两端 s删除空格。 BTRIM 是 . 的 TRIM(s)同义词。
LTRIM(s) 从的开头(左) s中删除空格。
RTRIM(s) 从的末尾(右) s中删除空格。
TRIM([BOTH \| LEADING \| TRAILING] [chars] FROM s) 从所选的末尾删除chars(或省略空格chars)。s 默认值为 BOTH
CHAR_LENGTH(s)CHARACTER_LENGTH(s) 中的 s字符数。
STRING_JOIN(list, separator) 将列表项串联到字符串中。
s1 \|\| s2 连接字符串 s1s2.

字符串谓词:

谓词 Description
s STARTS WITH prefix true以 . 开头sprefix 添加到 NOT 否定项: s NOT STARTS WITH prefix
s ENDS WITH suffix true以 . 结尾ssuffix 添加到 NOT 否定项: s NOT ENDS WITH suffix
s CONTAINS substring true在 . 中的substring任意位置发生时s 添加到 NOT 否定项: s NOT CONTAINS substring
match () limit 1 return upper("abc") as result
result
ABC
match () limit 1 return trim(leading 'a' from 'aabc') as result
result
公元前
match () limit 1 return string_join(["a", "bc"], "") as result
result
abc
MATCH (p :Person)
WHERE p.Name starts with 'T'
RETURN p.Name as actorName
actorName
卢宁

数值函数

功能 Description
ABS(x) 的绝对值 x
SQRT(x) 平方根。
EXP(x) e 引发到 x.
LN(x) 自然对数。
LOG10(x) Base-10 对数。
FLOOR(x) 最大整数≤ x
CEIL(x)CEILING(x) 最小整数≥ x
MOD(x, y) x余数除以 y
SIN(x)COS(x)TAN(x)COT(x) 三角函数(弧度)。
ASIN(x)ACOS(x)ATAN(x) 反三角函数。
DEGREES(x) 将弧度转换为度。
RADIANS(x) 将度转换为弧度。

数字与算术运算符 +-*/

Operator Description
x + y 加法。
x - y 减法。
x * y 乘法。
x / y 划分。
-x 否定。
match () limit 1 return 2 + 3 * 4 as a, 10 - 6 as b, mod(10, 4) as c, abs(-7) as d
a b c d
14 4 2 7
match () limit 1 return sqrt(9) as `sqrt`, 9 / 3 as divideResult
sqrt divideResult
3 3

条件表达式

CASE

CASE 根据条件(计算独立谓词)或简单形式(将一个表达式与一系列值进行比较)返回一个值。

搜索的表单依次评估每个 WHEN 谓词:

match (m:Movie)
return m.Title as Title, case when m.Year < 2000 then 'C' else 'M' end as Era
Title 时代
T1 C
T2 M
T3 M

简单窗体将一个表达式与每个 WHEN 值进行比较:

match (m:Movie)
return m.Title as Title,
    case m.Title
        when 'T1' then 'A'
        when 'T3' then 'G'
        else 'O'
    end as Name
Title Name
T1 A
T2 O
T3 G

注意

每个 CASE 表达式都必须包含一个 ELSE 子句。 CASE不支持没有ELSE

类型转换

CAST

CAST(value AS type)将值转换为另一种类型,例如stringint64 这在两种常见情况下是必需的。

嵌套属性访问。 当通过嵌套表达式或索引表达式(如路径的元素或映射成员)到达某个属性时,结果是一个 dynamic 事先不知道其类型的值。 在比较或计算它之前,将其强制转换为预期类型。

请参阅 此处 支持的类型。

match p = (a:Person)-[:ACTED_IN]->(m:Movie)
return m.Title as Title, cast(nodes(p)[0].Born as int) as ActorBorn
Title ActorBorn
T3 1956
T2 1956
T1 1956
T1 1958
MATCH (p:Person)
RETURN p.Name || ', ' || CAST(p.Born as string) as nameAndYear
nameAndYear
汤姆, 1956
凯文, 1958
Ron, 1954
Julia, 1967

聚合对象键。 聚合键不能是对象(dynamic如节点、边缘或属性映射)。 首先 to_json_string(...) 使用或 CAST(... AS string). 将对象值转换为字符串。

match (p:Person)->(m:Movie)
return to_json_string(p), count(m) as participatedInMoviesCount
to_json_string(p) participatedInMoviesCount
{“Name”:“Tom”, ... } 4
{“Name”:“Kevin”, ... } 1
{“Name”:“Ron”, ... } 1

JSON 函数

功能 Description
PARSE_JSON_STRING(s) 将 JSON 字符串分析为对象或数组。 使用 .[index]. 访问成员。
TO_JSON_STRING(x) 将值(包括节点或边缘)序列化为 JSON 字符串。
MATCH (n:Person {Name: 'Julia'})
RETURN TO_JSON_STRING(n) AS `json`
Json
{“Name”:“Julia”,“Born”:1967,“Label2”:[“Person”,“Female”,“BestActressAward ”],“Label”:“Person”}

Tip

结果别名 json 被转义,因为 json 是保留关键字

MATCH (p:Person)
limit 1
RETURN parse_json_string('{"a":"Michael", "b":"John"}'.a as string) AS name
名字
Michael
MATCH (p:Person)
limit 1
RETURN cast(parse_json_string('{"a":1, "b":2}').a as integer) AS a
a
1
MATCH () limit 1 RETURN PARSE_JSON_STRING('[1,2,3]')[1] as second
2

Tip

如果需要 parse_json_string() 特定类型,可能需要使用它从 json 强制转换检索到的值

列出和映射函数和谓词

功能 Description
SIZE(list) 列表中的元素数。
KEYS(element) 节点、边缘或映射的属性名称作为字符串列表。
l1 \|\| l2 连接列表 l1l2
value IN [list] value如果为列表的成员,则为 True。
x[i] 通过从零开始的位置或按键映射成员访问列表或路径元素。
match () limit 1 return ["a", "b", "c"][1] as second
b
match () limit 1 return size([1, 2, 3]) as `size`
size
3

Tip

结果别名 size 被转义,因为大小是保留关键字

match () limit 1 return keys({"a":1, "b":2}) as my_keys
my_keys
[“a”, “b” ]
MATCH (p:Person)
WHERE p.Name IN ['Tom', 'Kevin']
RETURN p.Name as actor
参与者
卢宁
Kevin
match () limit 1 return ["a"] || ["b"] as lst
lst
[“a”, “b”]

日期和时间函数

功能 Description
ZONED_DATETIME()CURRENT_TIMESTAMP 当前 UTC 时间戳。
ZONED_DATETIME("...") 分析字符串中的时间戳。
DURATION({...}) 单位地图的持续时间:days、、hoursminutessecondsmilliseconds、。 microsecondsnanoseconds 接受 RECORD 类型值。 yearsmonths 不受支持。
DURATION_BETWEEN(start, end) 两个时间戳之间的持续时间。
match () limit 1 return duration ({minutes: 5}) as "5min"
5 分钟
00:05:00
match () limit 1 return duration ({minutes: 5, seconds:25}) as "5min25sec"
5min25sec
00:05:25

如果图形中的节点具有 event_timestamp属性,则可以查找包含过去 10 分钟内发生的事件的所有图形节点,该事件从现在开始或从特定时间戳进行测量:

MATCH (n) where n.event_timestamp < CURRENT_TIMESTAMP - duration({minutes:10}) return n
MATCH (n) where n.event_timestamp < zoned_datetime('2025-09-15 09:00:00.0') - duration({minutes:10}) return n
MATCH () limit 1
RETURN DURATION_BETWEEN(zoned_datetime('2025-09-15 09:00:00.0'), zoned_datetime()) AS Elapsed

注意

引擎以 UTC 方式运行。

图形和路径函数

功能 Description
LABELS(element) 节点或边缘的标签,作为列表。
ELEMENT_ID(node) 节点的标识符。 不支持边缘。
NODES(path) 路径的节点,作为列表。
EDGES(path)RELATIONSHIPS(path) 路径的边缘,作为列表。
PATH_LENGTH(path) 路径中的边缘数(跃点)。
match (m: Movie) limit 1 return labels(m) as lbls
lbls
[“Movie”]
match p = (n:Person)-[e: ACTED_IN]->(m: Movie) return p, path_length(p), nodes(p), edges(p)

Aggregations

聚合函数汇总匹配的行。 当聚合出现在非聚合表达式旁边时,这些表达式将成为分组键。

功能 Description
COUNT(x)COUNT(*) 值数,或包含 COUNT(*)的行数。
SUM(x) 数值之和。
AVG(x) 数值的平均值。
MIN(x)MAX(x) 最小值和最大值。
COLLECT_LIST(x) 将值收集到列表中。
MATCH (p:Person)
RETURN COUNT(*) AS people, MIN(p.Born) AS earliest, MAX(p.Born) AS latest, SUM(p.Born) AS bornSum, AVG(p.Born) AS bornAvg
people 最早 最新 bornSum bornAvg
4 1954 1967 7835 1958.75

统计每个电影中的演员:

MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
RETURN m.Title as Movie, COUNT(*) AS ActorsCount
电影 ActorsCount
T1 2
T2 1
T3 1
MATCH (n:Person)-[:ACTED_IN]->(m:Movie)
RETURN collect_list(distinct n.Name) as actors
演员
[“Tom”, “Kevin”]

查找每个演员参与的电影数量:

MATCH (n:Person)-[:ACTED_IN]->(m:Movie)
RETURN TO_JSON_STRING(n) as actor, count(m) as moviesCount
参与者 moviesCount
{“Name”:“Tom”, ... ,“Label”:“Person”} 3
{“Name”:“Kevin”, ... ,“Label”:“Person”} 1

注意

若要按节点、边缘或路径进行分组或聚合,请先将其转换为字符串TO_JSON_STRING()CAST(object AS string),因为对象不能直接用作分组键。

有关详细信息,请参阅 GQL 指南中的 聚合

谓词

比较运算符比较两个标量值并返回布尔值。 它们适用于标量值,不适用于节点或边缘。

Operator Description
x = y 平等。
x <> y 不相等。
x < yx <= y 小于、小于或等于。
x > yx >= y 大于、大于或等于。

其他运算符:

谓词 Description
value IN [list] value如果为列表的成员,则为 True。
match (p:Person)
where p.Name in ['Tom', 'Julia']
return p.Name as name
名字
卢宁
朱莉娅

将测试除以 NOT 仅保留列表中缺少的值:

match (p:Person)
where not p.Name in ['Tom', 'Kevin', 'Ron']
return p.Name as name
名字
朱莉娅

其他谓词:

谓词 Description
expr IS NULLexpr IS NOT NULL 测试 null。 字符串类型 不能为 null
expr IS [NOT] TRUEexpr IS [NOT] FALSE 测试布尔表达式。
NOT expr 否定布尔条件。
MATCH (p:Person)
WHERE p.Name IN ['Tom', 'Kevin'] AND p.Born IS NOT NULL
RETURN p.Name as name
名字
卢宁
Kevin

可以使用 IS TRUEIS FALSE 测试布尔表达式的结果:

MATCH (p:Person)
WHERE (p.Born > 1960) IS TRUE
RETURN p.Name
名字
朱莉娅