我一直在使用临床图形数据集处理再入院问题。假设一名患者将在 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/