我正在使用 neo4j 数据库,需要能够查询检查节点中的日期属性是在当前日期之前还是之后。使用 csv 文件将日期传递到数据库中,日期格式为:mm/dd/yyyy。
研究了这个概念后,我发现 neo4j 目前在其发布版本中不支持日期。如果 neo4j 不支持日期,我如何让 neo4j 进行查询以检查 currentDate > dateProperty(意味着当前日期在日期属性中的日期之后)?
我宁愿不更改格式,除非有一种方法可以以 neo4j 可以使用的格式存储日期,但将其显示为 mm/dd/yyyy。如果没有,有没有办法可以使用查询中的代码将日期转换为 neo4j 可以使用的格式?
最佳答案
[更新了关于 neo4j 3.x 中 APOC 的信息]
原始答案
此查询应返回满足 currentDate > d.date
的所有节点。它假定您以相同的 mm/dd/yyyy
格式传递 currentDate
参数。
WITH split({currentDate}, '/') AS cd
MATCH (d:Data)
WITH cd, split(d.date, '/') AS dd, d
WHERE
(cd[2] > dd[2]) OR
(cd[2] = dd[2] AND
((cd[0] > dd[0]) OR
(cd[0] = dd[0] AND (cd[1] > dd[1]))))
RETURN d
注意 1:我在开头使用 WITH
,这样 cd
的计算只进行一次。如果该逻辑已合并到另一个 WITH
子句中(这是完全合法的),那么 cd
集合可能会为每个 Data
不必要地重新计算> 节点。
注意 2:只要每个日期的格式始终准确地为 mm/dd/yyyy
,此查询就不需要在比较之前将每个日期组件转换为 int。例如,mm
必须始终为 2 个数字字符('12' > '09' 为 true
),否则查询将无法正常工作('12' > ' 9' 是 false
)。
在 neo4j 3.x 中添加的 APOC 程序
在neo4j 3.x中,增加了APOC过程支持(但必须安装在neo4j服务器上),包括date/time support的过程.
关于database - 处理和比较 cypher 和 neo4j 中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31619977/