标量函数
标量函数返回单个值。
示例图
以下图表用于下方的示例
要重新创建该图,请在空的 Neo4j 数据库中运行以下查询
CREATE
(alice:Developer {name:'Alice', age: 38, eyes: 'Brown'}),
(bob:Administrator {name: 'Bob', age: 25, eyes: 'Blue'}),
(charlie:Administrator {name: 'Charlie', age: 53, eyes: 'Green'}),
(daniel:Adminstrator {name: 'Daniel', age: 54, eyes: 'Brown'}),
(eskil:Designer {name: 'Eskil', age: 41, eyes: 'blue', likedColors: ['Pink', 'Yellow', 'Black']}),
(alice)-[:KNOWS]->(bob),
(alice)-[:KNOWS]->(charlie),
(bob)-[:KNOWS]->(daniel),
(charlie)-[:KNOWS]->(daniel),
(bob)-[:MARRIED]->(eskil)
character_length()
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
需要计算字符长度的字符串值。 |
|
返回 |
|
||
|
RETURN character_length('Alice')
| character_length('Alice') |
|---|
|
行:1 |
返回 STRING 中的 Unicode 字符数。
coalesce()
语法 |
|
||
描述 |
返回表达式列表中第一个非空(non-null)的值。 |
||
参数 |
名称 |
类型 |
描述 |
|
|
如果是第一个非 |
|
返回 |
|
||
如果所有参数均为 |
MATCH (a)
WHERE a.name = 'Alice'
RETURN coalesce(a.hairColor, a.eyes)
| coalesce(a.hairColor, a.eyes) |
|---|
|
行:1 |
elementId()
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
节点或关系的元素 ID。 |
|
返回 |
|
||
在使用 elementId() 时有一些重要事项需要注意:
-
每个节点和关系都保证有一个元素 ID。此 ID 在单个事务范围内,对于同一 DBMS 中的所有数据库内的所有节点和关系都是唯一的。但是,不保证返回 ID 值的顺序,也不保证 ID
STRING值的长度。在单个事务范围之外,不保证 ID 值与元素之间的映射关系。 -
当删除节点和关系时,Neo4j 会重用其内部 ID。因此,依赖内部 Neo4j ID 的应用程序非常脆弱且可能不准确。因此,建议使用应用程序生成的 ID。
|
在 |
MATCH (n:Developer)
RETURN elementId(n)
返回每个 Developer 节点的标识符。
| elementId(n) |
|---|
|
行:1 |
MATCH (:Developer)-[r]-()
RETURN elementId(r)
返回连接到 Developer 节点的每个关系的标识符。
| elementId(r) |
|---|
|
|
行:2 |
endNode()
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
一个关系。 |
|
返回 |
|
||
|
MATCH (x:Developer)-[r]-()
RETURN endNode(r)
| endNode(r) |
|---|
|
|
行:2 |
head()
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
一个将返回其中第一个元素的列表。 |
|
返回 |
|
||
|
|
如果 |
MATCH (a)
WHERE a.name = 'Eskil'
RETURN a.likedColors, head(a.likedColors)
返回列表中的第一个元素。
| a.likedColors+ | +head(a.likedColors) |
|---|---|
|
|
行:1 |
|
id()已弃用
建议使用 elementId() 代替。 |
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
一个节点或一个关系。 |
|
返回 |
|
||
|
在使用 id() 时有一些重要事项需要注意:
-
id()函数返回一个节点或关系标识符,该标识符按对象类型和数据库唯一。因此,在同一个数据库中,id()可能为节点和关系返回相同的值。 -
Neo4j 实现 ID 的方式是确保数据库中的每个节点和关系都有一个标识符。节点或关系的标识符在单个事务范围内,保证在数据库内所有其他节点和关系的标识符中是唯一的。
-
当删除节点和关系时,Neo4j 会重用其内部 ID。因此,依赖内部 Neo4j ID 的应用程序非常脆弱且可能不准确。因此,建议使用应用程序生成的 ID。
|
在复合数据库上,应谨慎使用 当在特定数据库的子查询中调用时,节点或关系的结果 ID 值是该数据库本地的。来自不同数据库的节点或关系的本地 ID 可能是相同的。 当从查询的根上下文调用时,结果值是节点或关系的扩展 ID。扩展 ID 可能与相同节点或关系的本地 ID 不同。 |
MATCH (a)
RETURN id(a)
返回每个节点的节点标识符。
| id(a) |
|---|
|
|
|
|
|
行:5 |
last()
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
一个将返回其中最后一个元素的列表。 |
|
返回 |
|
||
注意事项
|
|
如果 |
MATCH (a)
WHERE a.name = 'Eskil'
RETURN a.likedColors, last(a.likedColors)
返回列表中的最后一个元素。
| a.liked_colors | last(a.liked_colors) |
|---|---|
|
|
行:1 |
|
length()
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
将对其关系进行计数的路径。 |
|
返回 |
|
||
|
要计算 LIST 的长度或 STRING 中 Unicode 字符的数量,请参见 size() |
MATCH p = (a)-->(b)-->(c)
WHERE a.name = 'Alice'
RETURN length(p)
返回路径 p 的长度。
| length(p) |
|---|
|
|
|
行:3 |
path_length()仅限 Cypher 25在 Neo4j 2026.02 中引入
此函数是应用于路径时 length() 函数的别名,它是作为 Cypher GQL 一致性的一部分引入的。除了命名和 GQL 的路径值表达式/连接规则外,该函数符合 GQL 标准。
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
将对其关系进行计数的路径。 |
|
返回 |
|
||
|
要计算 LIST 的长度或 STRING 中 Unicode 字符的数量,请参见 size() |
MATCH p = (a)-->(b)-->(c)
WHERE a.name = 'Alice'
RETURN path_length(p)
返回路径 p 的长度。
| path_length(p) |
|---|
|
|
|
行:3 |
nullIf()
语法 |
|
||
描述 |
如果给定的两个参数相等,则返回 null,否则返回第一个参数的值。 |
||
参数 |
名称 |
类型 |
描述 |
|
|
如果第二个值不相等,则返回的第一个值。 |
|
|
|
用于与第一个值进行比较的第二个值。 |
|
返回 |
|
||
此函数与 coalesce() 函数相反,后者在给定值为 null 时返回默认值。
RETURN nullIf(4, 4)
由于两个参数相等,返回 null 值。
| nullIf(4, 4) |
|---|
|
行:1 |
RETURN nullIf("abc", "def")
由于两个参数不相等,返回第一个参数 "abc"。
| nullIf("abc", "def") |
|---|
|
行:1 |
nullIf() 函数可以与 coalesce() 函数结合使用,将一个数据值转换为另一个值。
MATCH (a)
RETURN a.name AS name, coalesce(nullIf(a.eyes, "Brown"), "Hazel") AS eyeColor
| 名称 (name) | eyeColor |
|---|---|
|
|
|
|
|
|
|
|
|
|
行:5 |
|
properties()
语法 |
|
||
描述 |
返回一个包含 |
||
参数 |
名称 |
类型 |
描述 |
|
|
返回其属性的实体。 |
|
返回 |
|
||
|
如果 |
CREATE (p:Person {name: 'Stefan', city: 'Berlin'})
RETURN properties(p)
| properties(p) |
|---|
|
行:1 |
randomUUID()
语法 |
|
||
描述 |
生成一个随机 UUID。 |
||
返回 |
|
||
通用唯一识别码 (UUID),也称为全局唯一标识符 (GUID),是一个 128 位的值,具有极强的唯一性保证。
RETURN randomUUID() AS uuid
| uuid |
|---|
|
行:1 |
返回一个随机生成的 UUID。
size()
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
需要计算其长度的值。 |
|
返回 |
|
||
要计算 PATH 的长度,请参见 length()。 |
|
RETURN size(['Alice', 'Bob'])
| size(['Alice', 'Bob']) |
|---|
|
行:1 |
返回列表中的元素数量。
MATCH (a)
WHERE a.name = 'Alice'
RETURN size([p=(a)-->()-->() | p]) AS fof
| fof |
|---|
|
行:1 |
返回匹配模式表达式的路径数量。(路径列表的大小)。
MATCH (a)
WHERE size(a.name) > 6
RETURN size(a.name)
| size(a.name) |
|---|
|
行:1 |
返回 STRING 'Charlie' 中的字符数量。
RETURN size(vector([1, 2, 3], 3, INTEGER8)) AS size
| size |
|---|
|
行:1 |
返回向量的维度。
您也可以使用 vector_dimension_count() 函数来返回 VECTOR 值的维度。 |
startNode()
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
一个关系。 |
|
返回 |
|
||
|
MATCH (x:Developer)-[r]-()
RETURN startNode(r)
| startNode(r) |
|---|
|
|
行:2 |
timestamp()
语法 |
|
||
描述 |
返回当前时间与 1970 年 1 月 1 日 UTC 午夜之间以毫秒为单位的差值。 |
||
返回 |
|
||
datetime.fromEpochMillis() 是 timestamp() 的功能等价物。 |
|
RETURN timestamp()
返回以毫秒为单位的时间。
| timestamp() |
|---|
|
行:1 |
toBoolean()
语法 |
|
||
描述 |
将 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为布尔值的值。 |
|
返回 |
|
||
|
如果 |
如果解析失败,将返回 |
如果 |
如果提供不是 |
RETURN toBoolean('true'), toBoolean('not a boolean'), toBoolean(0)
| toBoolean('true') | toBoolean('not a boolean') | toBoolean(0) |
|---|---|---|
|
|
|
行:1 |
||
toBooleanOrNull()
语法 |
|
||
描述 |
将值转换为 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为布尔值或 null 的值。 |
|
返回 |
|
||
|
如果 |
如果解析失败,将返回 |
如果 |
如果 |
RETURN toBooleanOrNull('true'), toBooleanOrNull('not a boolean'), toBooleanOrNull(0), toBooleanOrNull(1.5)
| toBooleanOrNull('true') | toBooleanOrNull('not a boolean') | toBooleanOrNull(0) | toBooleanOrNull(1.5) |
|---|---|---|---|
|
|
|
|
行:1 |
|||
toFloat()
语法 |
|
||
描述 |
将 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为浮点数的值。 |
|
返回 |
|
||
|
如果 |
如果解析失败,将返回 |
如果提供不是 |
RETURN toFloat('11.5'), toFloat('not a number')
| toFloat('11.5') | toFloat('not a number') |
|---|---|
|
|
行:1 |
|
toFloatOrNull()
语法 |
|
||
描述 |
将值转换为 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为浮点数或 null 的值。 |
|
返回 |
|
||
|
如果 |
如果解析失败,将返回 |
如果 |
RETURN toFloatOrNull('11.5'), toFloatOrNull('not a number'), toFloatOrNull(true)
| toFloatOrNull('11.5') | toFloatOrNull('not a number') | toFloatOrNull(true) |
|---|---|---|
|
|
|
行:1 |
||
toInteger()
语法 |
|
||
描述 |
将 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为整数的值。 |
|
返回 |
|
||
|
如果 |
如果解析失败,将返回 |
如果 |
如果 |
如果提供不是 |
RETURN toInteger('42'), toInteger('not a number'), toInteger(true)
| toInteger('42') | toInteger('not a number') | toInteger(true) |
|---|---|---|
|
|
|
行:1 |
||
toIntegerOrNull()
语法 |
|
||
描述 |
将值转换为 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为整数或 null 的值。 |
|
返回 |
|
||
|
如果 |
如果解析失败,将返回 |
如果 |
如果 |
如果 |
RETURN toIntegerOrNull('42'), toIntegerOrNull('not a number'), toIntegerOrNull(true), toIntegerOrNull(['A', 'B', 'C'])
| toIntegerOrNull('42') | toIntegerOrNull('not a number') | toIntegerOrNull(true) | toIntegerOrNull(['A', 'B', 'C']) |
|---|---|---|---|
|
|
|
|
行:1 |
|||
type()
语法 |
|
||
描述 |
返回 |
||
参数 |
名称 |
类型 |
描述 |
|
|
一个关系。 |
|
返回 |
|
||
|
MATCH (n)-[r]->()
WHERE n.name = 'Alice'
RETURN type(r)
返回 r 的关系类型。
| type(r) |
|---|
|
|
行:2 |
valueType()
语法 |
|
||
描述 |
返回给定表达式求值结果的最精确值类型的 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要返回其类型的值。 |
|
返回 |
|
||
输出是确定性的,并使用了 类型规范化。
注意事项
Cypher 的未来版本可能包含对当前类型系统的更新。这可能包括引入新类型和现有支持类型的子类型。如果引入了新类型,它将在发布后立即由 valueType() 函数返回。然而,如果引入了先前支持类型的更精确子类型,这将视为破坏性变更。
例如,该函数当前返回 "FLOAT",但如果添加了更具体的 FLOAT 类型(例如 FLOAT32),这将被视为更具体,并且在 Neo4j 的下一个主要版本之前不会返回。因此,在下一个主要版本之前,任何 FLOAT32 值将继续返回 "FLOAT"。
以下列表包含了 valueType() 函数当前显示的所有受支持类型
-
预定义类型
-
NOTHING -
null -
布尔值 (BOOLEAN) -
STRING -
INTEGER(整数) -
FLOAT -
DATE -
LOCAL TIME -
ZONED TIME -
LOCAL DATETIME -
ZONED DATETIME -
DURATION(持续时间) -
POINT -
NODE -
RELATIONSHIP
-
-
构造类型
-
MAP -
LIST<INNER_TYPE>(按内部类型排序) -
PATH
-
-
动态联合类型
-
INNER_TYPE_1 \| INNER_TYPE_2…(按封闭动态联合类型的特定规则排序) -
ANY
-
在依赖 valueType() 函数的输出时应考虑这一点。
请参阅 类型谓词表达式,以获取测试类型值的替代方法。
UNWIND ["abc", 1, 2.0, true, [date()]] AS value
RETURN valueType(value) AS result
| 结果 |
|---|
|
|
|
|
|
行:5 |