Neo4j:将字符串转换为日期
Neo4j 3.4 见证了时间日期类型的引入,虽然现在已经拥有强大的内建功能,但将字符串转换为日期仍然是一个挑战。
如果我们的字符串采用 yyyy-MM-dd 格式,我们可以调用date函数并传入该字符串,系统会自动将其转换为日期。
RETURN date("2019-06-04") AS date
执行此查询将返回以下结果
| 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
执行此查询将返回以下结果
| date |
|---|
"2018-07-20" |
或者我们可以使用 APOC 库的apoc.date.parse函数将数据整理为受支持的格式。该函数为处理不同的日期和时间模式提供了灵活的方式。
下面的查询
-
使用
apoc.date.parse函数将我们的dd/MM/yyyy日期字符串转换为毫秒级时间戳 -
基于该时间戳创建一个 datetime
-
基于该 datetime 创建一个 date
WITH apoc.date.parse("31/05/2019", "ms", "dd/MM/yyyy") AS ms
RETURN date(datetime({epochmillis: ms})) AS date
执行此查询将返回以下结果
| 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
执行此查询将返回以下结果
| date |
|---|
"2019-09-10" |
此页面有帮助吗?