知识库

Neo4j:将字符串转换为日期

Neo4j 3.4 引入了时间日期类型,虽然现在有强大的内置功能,但将字符串转换为日期仍然是一个挑战。

如果我们的字符串格式为 yyyy-MM-dd,我们可以使用该字符串调用 date 函数,它将自动转换为日期。

RETURN date("2019-06-04") AS date

执行此查询将返回以下结果

日期

"2019-06-04"

但是,如果我们的字符串是另一种格式,例如 dd/MM/yyyy 呢?让我们尝试从这样的字符串创建日期。

RETURN date("04/06/2019") AS date

执行此查询将返回以下结果

Text cannot be parsed to a Date
"04/06/2019"
 ^

解决此问题的一种方法是使用 split 函数将字符串手动解析为不同的组成部分。然后我们可以从这些组成部分创建日期。

WITH [item in split("20/07/2018", "/") | toInteger(item)] AS dateComponents
RETURN date({day: dateComponents[0], month: dateComponents[1], year: dateComponents[2]}) AS date

执行此查询将返回以下结果

日期

"2018-07-20"

此外,我们可以使用 APOC 库的 apoc.date.parse 函数将数据处理成支持的格式。此函数为处理不同的日期和时间模式提供了灵活的方法。

以下查询

  • 使用 apoc.date.parse 函数将 dd/MM/yyyy 日期字符串转换为毫秒时间戳

  • 从该时间戳创建日期时间

  • 从该日期时间创建日期

WITH apoc.date.parse("31/05/2019", "ms", "dd/MM/yyyy") AS ms
RETURN date(datetime({epochmillis: ms})) AS date

执行此查询将返回以下结果

日期

"2019-05-31"

我们也可以使用此函数来解析更长的日期格式

WITH apoc.date.parse("Tue, 10 September 2019", "ms", "EEE, dd MMMMM yyyy") AS ms
RETURN date(datetime({epochmillis: ms})) AS date

执行此查询将返回以下结果

日期

"2019-09-10"

© . All rights reserved.