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

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

https://stackoverflow.com/questions/42601571/

相关文章:

php - laravel blade 使用 substr 方法禁用转义

elixir - 在 Ecto 中加载树状结构

flask - 在按钮 onclick location.href 重定向中使用 Flask url

python - 带注释的水平条形图

spring-mvc - spring-boot自定义404错误页面

php - 所有链接都重定向到 localhost/dashboard/with codeignit

python - Django makemessages 写假文件

css - 使用过多的字体声明是否会对性能产生影响?

sql - Oracle SYSDATE 格式更改

indexing - solr 的 WSO2 API 管理器问题