OSQL中的OrientDB日期操作,用于查找同一天但不同年份的节点路径

时间:2016-09-26 22:32:57

标签: orientdb

我的图表结构如下:

A - >乙

A有一个日期字段。

这仍然基于与my other question中相同的问题,但这不同之处在于我并不关心尝试在一个OSQL调用中执行所有操作来创建边缘。在这种情况下,我只是尝试生成一个看起来像这样的路径:

A1(日期= 2014-01-01)---> B< --- A2(日期= 2013-01-01)

并返回一个仅包含A1和A2 id的表。

我开始编写一个看似如下的MATCH查询:

MATCH {CLASS: A, AS: A1} -edgeTypeA->
  {AS: B} <-edgeTypeA-
  {AS: A2, WHERE: {$matched.A1.Date=$currentMatch.Date}
RETURN A1, B, A2

这有效,但它只返回匹配,其中A1和A2基本上是完全相同的日期(包括A1和A2是同一节点的地方)。

我知道我可以使用format()来提取日期字段的一部分......例如,如果我只想要一个包含年份的字符串,我可以使用$ currentMatch.Date.format('yyyy')来获取它为了我的查询,我仍然没有想出如何增加该日期。

1 个答案:

答案 0 :(得分:1)

在我的旧问题中看到what Alessandro did后我开始工作了。我正在为归档目的添加我的解决方案。希望它可以帮助其他需要在OSQL查询中进行日期操作的人。

这是我最终的结果:

MATCH {CLASS: A, AS: A1} -edgeTypeA->
    {AS: B} <-edgeTypeA-
    {AS: A2, WHERE: ($matched.A1.Date.format('yyyy').asInteger()=sum($currentMatch.Date.format('yyyy').asInteger(),-1) AND
                     $matched.A1.Date.format('MM-dd')=$currentMatch.Date.format('MM-dd') ) }
RETURN A1,A2

我的数据是正确的:

+----+------+------+
|#   |A1    |A2    |
+----+------+------+
|0   |#49:30|#49:32|
|1   |#55:44|#56:46|
|2   |#53:0 |#53:2 |
|3   |#55:20|#55:22|
|4   |#49:42|#49:44|
|5   |#50:32|#50:34|
+----+------+------+

打电话给sum()asInteger()感觉很多,但现在我理解它并可以使用它。