Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database cypher和neo4j中的数据处理和比较_Database_Date_Datetime_Neo4j - Fatal编程技术网

Database cypher和neo4j中的数据处理和比较

Database cypher和neo4j中的数据处理和比较,database,date,datetime,neo4j,Database,Date,Datetime,Neo4j,我正在使用neo4j数据库,需要能够查询检查节点中的日期属性是在当前日期之前还是之后。使用csv文件将日期传递到数据库中,日期格式为:mm/dd/yyyy 在研究了这个概念之后,我发现neo4j的发布版本目前不支持日期。如果neo4j不支持日期,如何让neo4j执行查询,检查currentDate>dateProperty(意味着当前日期在date属性中的日期之后) 我不希望更改格式,除非有办法将日期存储为neo4j可以使用的格式,但显示为mm/dd/yyyy。如果没有,是否有办法将日期转换为n

我正在使用neo4j数据库,需要能够查询检查节点中的日期属性是在当前日期之前还是之后。使用csv文件将日期传递到数据库中,日期格式为:mm/dd/yyyy

在研究了这个概念之后,我发现neo4j的发布版本目前不支持日期。如果neo4j不支持日期,如何让neo4j执行查询,检查currentDate>dateProperty(意味着当前日期在date属性中的日期之后)


我不希望更改格式,除非有办法将日期存储为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:我在开始时将
一起使用,因此
cd
的计算只进行一次。如果该逻辑已并入另一个
WITH
子句(这是完全合法的),则可能会对每个
数据
节点不必要地重新计算
cd
集合

注2:只要每个日期的格式始终精确为
mm/dd/yyyy
,此查询不需要在比较之前将每个日期组件转换为int。例如,
mm
必须始终为2个数字字符('12'>'09'为
true
),否则查询将无法正常工作('12'>'9'为
false

neo4j 3.x中增加了APOC程序
在neo4j 3.x中,添加了APOC过程支持(但必须安装在neo4j服务器上),包括的过程。

在最新版本的neo4j中,您有date()和datetime()格式:

设置节点属性时,请使用类似以下语法:

Match(n) where id(n) = 123 set n.somedatevalue = datetime("2020-06-08T13:08:00Z") 匹配(n),其中id(n)=123设置n.somedatevalue=datetime(“2020-06-08T13:08:00Z”) (可以使用更多的日期/日期时间变体,请参阅文档)


然后,您可以在选择节点时对日期/日期时间属性进行(正确的)比较。

我假设数据代表一个节点,而不仅仅是节点中的一部分内容?为什么在开始时有一个?是的,
数据
是一个可应用于一个或多个节点的属性。我决定添加它,以防你已经有了标签。请参阅我的更新答案,了解为什么在中有一个前导的
。我尝试了这个方法,它看起来非常有希望,但当我运行它时,它返回了一个d.date大于currentDate的项。我输入了2015年7月28日作为cd,它返回了一个日期为2015年11月24日的节点,它复制了您所说的您尝试过的内容。正如预期的那样,查询不会返回结果。唯一比在实现日期的语言中处理日期更糟糕的是,在没有实现日期的语言中处理日期。