知识库

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"