使用 “版本 ”下拉列表切换服务。
了解有关导航的详细信息。
适用于: ✅ Azure 数据资源管理器
本文列出了 GQL (图形查询语言)中支持的标量函数、运算符和谓词。
这些示例使用“创建图形”中的电影图G()并设置图形引用:Person节点(、NameBorn节点(MovieTitle、Description、)Year和ACTED_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 |
连接字符串 s1 和 s2. |
字符串谓词:
| 谓词 |
Description |
s STARTS WITH prefix |
true以 . 开头s时prefix 添加到 NOT 否定项: s NOT STARTS WITH prefix。 |
s ENDS WITH suffix |
true以 . 结尾s时suffix 添加到 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
match () limit 1 return trim(leading 'a' from 'aabc') as result
match () limit 1 return string_join(["a", "bc"], "") as result
MATCH (p :Person)
WHERE p.Name starts with 'T'
RETURN p.Name as 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
match () limit 1 return sqrt(9) as `sqrt`, 9 / 3 as divideResult
条件表达式
CASE
CASE 根据条件(计算独立谓词)或简单形式(将一个表达式与一系列值进行比较)返回一个值。
搜索的表单依次评估每个 WHEN 谓词:
match (m:Movie)
return m.Title as Title, case when m.Year < 2000 then 'C' else 'M' end as Era
简单窗体将一个表达式与每个 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)将值转换为另一种类型,例如string。 int64 这在两种常见情况下是必需的。
嵌套属性访问。 当通过嵌套表达式或索引表达式(如路径的元素或映射成员)到达某个属性时,结果是一个 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
MATCH (p:Person)
limit 1
RETURN cast(parse_json_string('{"a":1, "b":2}').a as integer) AS a
MATCH () limit 1 RETURN PARSE_JSON_STRING('[1,2,3]')[1] as second
Tip
如果需要 parse_json_string() 特定类型,可能需要使用它从 json 强制转换检索到的值
列出和映射函数和谓词
| 功能 |
Description |
SIZE(list) |
列表中的元素数。 |
KEYS(element) |
节点、边缘或映射的属性名称作为字符串列表。 |
l1 \|\| l2 |
连接列表 l1 和 l2。 |
value IN [list] |
value如果为列表的成员,则为 True。 |
x[i] |
通过从零开始的位置或按键映射成员访问列表或路径元素。 |
match () limit 1 return ["a", "b", "c"][1] as second
match () limit 1 return size([1, 2, 3]) as `size`
Tip
结果别名 size 被转义,因为大小是保留关键字
match () limit 1 return keys({"a":1, "b":2}) as my_keys
MATCH (p:Person)
WHERE p.Name IN ['Tom', 'Kevin']
RETURN p.Name as actor
match () limit 1 return ["a"] || ["b"] as lst
日期和时间函数
| 功能 |
Description |
ZONED_DATETIME()、CURRENT_TIMESTAMP |
当前 UTC 时间戳。 |
ZONED_DATETIME("...") |
分析字符串中的时间戳。 |
DURATION({...}) |
单位地图的持续时间:days、、hoursminutes、seconds、milliseconds、。 microsecondsnanoseconds 接受 RECORD 类型值。
years 和 months 不受支持。 |
DURATION_BETWEEN(start, end) |
两个时间戳之间的持续时间。 |
match () limit 1 return duration ({minutes: 5}) as "5min"
match () limit 1 return duration ({minutes: 5, seconds:25}) as "5min25sec"
如果图形中的节点具有 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
图形和路径函数
| 功能 |
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
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
查找每个演员参与的电影数量:
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 < y、x <= y |
小于、小于或等于。 |
x > y、x >= 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 NULL、expr IS NOT NULL |
测试 null。
字符串类型 不能为 null |
expr IS [NOT] TRUE、expr 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
可以使用 IS TRUE 或 IS FALSE 测试布尔表达式的结果:
MATCH (p:Person)
WHERE (p.Born > 1960) IS TRUE
RETURN p.Name
相关内容