标量函数
标量函数返回单个值。
示例图
以下图用于下面的示例
要重新创建该图,请对空的 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
姓名 | 眼睛颜色 |
---|---|
|
|
|
|
|
|
|
|
|
|
行数: 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之间的毫秒差 |
||
返回值 |
|
它等效于 |
即使对于长时间运行的查询, |
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 5.13 版本中支持的所有类型(直到 Neo4j 的下一个主要版本发布)。
-
预定义类型
-
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 |