标量函数
标量函数返回单个值。
示例图
以下图用于下面的示例
要重新创建图,请对空的 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()
语法 |
|
||
描述 |
返回表达式列表中第一个非空值。 |
||
参数 |
名称 |
类型 |
描述 |
|
|
如果这是第一个非 |
|
返回 |
|
如果所有参数都是 |
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 |
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
名称 | 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'
中字符的数量。
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()
函数就会返回该类型。但是,如果引入了先前支持的类型的更精确子类型,则将被视为一个重大更改。因此,在 Neo4j 5.13 发布后引入的任何新子类型都不会被 valueType()
函数返回,直到 Neo4j 的下一个主要版本。
例如,该函数当前返回 "FLOAT"
,但如果添加了更具体的 FLOAT
类型(例如 FLOAT32
),这将被认为是更具体的,并且在 Neo4j 的下一个主要版本之前不会返回。因此,对于任何 FLOAT32
值,在下一个主要版本之前将继续返回 "FLOAT"
。
考虑到这一点,以下列表包含 valueType()
函数在 Neo4j 下一个主要版本之前显示的所有支持类型(截至 Neo4j 5.13)
-
预定义类型
-
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 |