date - 如何将天数添加到 Cypher 中的日期属性?

标签 date neo4j cypher days

我一直在使用临床图形数据集处理再入院问题。假设一名患者将在 30 天内再次入院。所以,这意味着我需要在第一个日期(访问日期)上为第二次访问日期增加 30 天。

这是 Cypher 查询:

MATCH(p:Person)-[r:PATIENT_HAS]->(e:Encounter)  
WITH p,e 
MATCH (p)-[r:PATIENT_HAS]-(e2:Encounter) WHERE e2.ADMIT_DATE < (e.ADMIT_DATE + 30)

此查询将不起作用,因为日期属性采用 YYYYMMDD 格式。例如,如果是20151225,它会给出20151255。但是我需要在添加30天后得到它作为20160124。有没有其他方法可以使用与 YYYYMMDD 不同的格式。我知道有 YYYY-MM-DD 的字符串格式,但是如何使用这种格式来添加天数?

如何做到这一点?

非常感谢您的帮助。

最佳答案

在我看来,在 Neo4j 中处理日期的最佳方法是将它们保存为以毫秒或秒为单位的 UNIX 纪元时间。我们在 Neo4j 中有一个很棒的插件,叫做 apoc procedures这使您可以使用很棒的程序。在您的特定情况下,我会利用 apoc.date.* 程序并将您的日期格式解析为以秒为单位的纪元时间。

MATCH (e:Encounter)
WITH e,apoc.date.parse(e.ADMIT_DATE,"s","YYYYMMDD") as unix
set e.unix = unix

所以现在您的查询看起来像:

MATCH(p:Person)-[r:PATIENT_HAS]->(e:Encounter)   
MATCH (p)-[r:PATIENT_HAS]-(e2:Encounter) 
WHERE e2.unix < e.unix + (30 * 24 * 60 * 60)

当然你可以简化这个查询并使其更短:

MATCH  (e2:Encounter)-[r:PATIENT_HAS]-(p:Person)-[r:PATIENT_HAS]->(e:Encounter)  
WHERE e2.unix < e.unix + (30 * 24 * 60 * 60)

关于date - 如何将天数添加到 Cypher 中的日期属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42601571/

相关文章:

symfony - graphaware/neo4j-php-ogm 事件监听器

neo4j - 如何在 Neo4j 中将 `with` 语句与 `call.apoc.do.when` 一起使用?

python - 在 Python 中按特定日期列出 Outlook 电子邮件

mysql - 为什么这段代码不起作用?从生成日期范围获取计数

Neo4j 错误 - 无法在路径数据的 JSON 中找到预期的属性(密码)

neo4j group by 和 sum 值

Neo4j 2.0.0M04,使用 Cypher 和新索引

neo4j - 如何要求 Neo4j 考虑周期

php - 使用 PHP 按键和值取消设置数组

javascript - 在Javascript中以毫秒精度将日期转换为unix