database - 处理和比较 cypher 和 neo4j 中的日期

标签 database date datetime neo4j

我正在使用 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/

相关文章:

c# - 使用 Dot Connect 和 MySQL 出现“关键字不支持错误”

javascript - 如何从 JavaScript 中的日期数字获取星期几?

python - 拆分和合并日期

date - Elasticsearch 或 term 与日期范围相结合

javascript setMonth() - 设置从日期 1 到日期 2 的月份。为什么date1也要变?

python - 如何使用 JSON.loads 转换为 Python 日期时间对象?

php - 从当前日期时间中减去获取的日期时间

python - 如何使用 Flask 框架从数据库中删除项目?

sql - 如何为这个特定标签触发选择查询 <m :Number> in XMLTYPE

mysql - 添加 json 列时遇到 Knex.js 和 MySql 错误