数据类型转换

Cypher® 支持许多函数来将值转换为不同的数据类型。本节将概述这些函数,并提供如何在实践中使用它们的示例。

用于转换数据值的函数

以下函数可用于转换数据值

函数 描述

toBoolean()

STRINGINTEGERBOOLEAN 值转换为 BOOLEAN 值。

toBooleanList()

转换 LIST<ANY> 并返回 LIST<BOOLEAN> 值。如果任何值无法转换为 BOOLEAN,则它们将在返回的 LIST<BOOLEAN> 中为 null

toBooleanOrNull()

STRINGINTEGERBOOLEAN 值转换为 BOOLEAN 值。对于任何其他输入值,将返回 null

toFloat()

INTEGERFLOATSTRING 值转换为 FLOAT 值。否则返回 null

toFloatList()

转换 LIST<ANY> 并返回 LIST<FLOAT> 值。如果任何值无法转换为 FLOAT,则它们将在返回的 LIST<FLOAT> 中为 null

toFloatOrNull()

INTEGERFLOATSTRING 值转换为 FLOAT。对于任何其他输入值,将返回 null

toInteger()

BOOLEANINTEGERFLOATSTRING 值转换为 INTEGER 值。

toIntegerList()

LIST<ANY> 转换为 LIST<INTEGER> 值。如果任何值无法转换为 INTEGER,则它们将在返回的 LIST<INTEGER> 中为 null。

toIntegerOrNull()

BOOLEANINTEGERFLOATSTRING 值转换为 INTEGER 值。对于任何其他输入值,将返回 null

toString()

INTEGERFLOATBOOLEANSTRINGPOINTDURATIONDATEZONED TIMELOCAL TIMELOCAL DATETIMEZONED DATETIME 值转换为 STRING 值。

toStringList()

转换 LIST<ANY> 并返回 LIST<STRING> 值。如果任何值无法转换为 STRING,则它们将在返回的 LIST<STRING> 中为 null

toStringOrNull()

INTEGERFLOATBOOLEANSTRINGPOINTDURATIONDATEZONED TIMELOCAL TIMELOCAL DATETIMEZONED DATETIME 值转换为 STRING。对于任何其他输入值,将返回 null

有关这些函数以及许多其他函数的更多信息,可以在 函数 部分中找到。

示例

以下图用于下面的示例

values and types converting data graph

要重新创建它,请对空的 Neo4j 数据库运行以下查询

CREATE (keanu:Person {name:'Keanu Reeves', age: 58, active:true}),
       (carrieAnne:Person  {name:'Carrie-Anne Moss', age: 55, active:true}),
       (keanu)-[r:KNOWS {since:1999}]->(carrieAnne)

返回转换后的值

在下面的查询中,函数 toFloat 用于转换两个 STRING 值。它显示如果数据转换不可行,则返回 null

MATCH (keanu:Person {name:'Keanu Reeves'})
RETURN toFloat(keanu.age), toInteger(keanu.name)
表 1. 结果
toFloat(keanu.age) toInteger(keanu.name)

58.0

null

如果函数 toFloat 传递了一个不受支持的值(例如 DATE 值),它将抛出错误

查询
WITH date({
  year: 2023, month: 5, day: 2
}) AS d
RETURN toFloat(d)
错误消息
Type mismatch: expected Float, Integer, Number or String but was Date (line 4, column 16 (offset: 66))
"RETURN toFloat(d)"

但是,如果将相同的值传递给函数 toFloatOrNull,则将返回 null

查询
WITH date({
  year: 2023, month: 5, day: 2
}) AS d
RETURN toFloatOrNull(d)
表 2. 结果
toFloatOrNull(d)

null

还可以将转换后的值作为列表返回。下面的查询使用 toStringList 将所有传递的值转换为 STRING 值,并将其作为 LIST<STRING> 返回

MATCH (keanu:Person {name:'Keanu Reeves'})
RETURN toStringList([keanu.name, keanu.age]) AS keanuList
表 3. 结果
keanuList

["Keanu Reeves", "58"]

更新属性值类型

转换数据值的函数可用于更新节点和关系上的属性值。下面的查询将 ageINTEGER)、activeBOOLEAN)和 sinceINTEGER)属性转换为 STRING

MATCH (keanu:Person {name:'Keanu Reeves'})-[r:KNOWS]-()
SET keanu.age = toString(keanu.age),
    keanu.active = toString(keanu.active),
    r.since = toString(r.since)
RETURN keanu.age, keanu.active, r.since
表 4. 结果
keanu.age keanu.active r.since

"58"

"true"

"1999"