美文网首页
Neo4j:Cypher的时间日期范围操作

Neo4j:Cypher的时间日期范围操作

作者: 今天无Bug | 来源:发表于2019-03-03 12:59 被阅读0次

    原文链接:https://markhneedham.com/blog/2019/01/13/neo4j-cypher-date-ranges/

    本周我工作中有一项任务,是使用Cypher查询语言去创建一个日期范围的数据集。
    我之前使用过duration函数,它能够对指定时期进行增加或删除操作,所以,我想我可以从这个函数开始。如果我想查找2019年1月1号之后一天的日期,可以通过下面的查询语句:

    neo4j> WITH date("2019-01-01") AS startDate
         RETURN startDate + duration({days: 1}) AS date;
    +------------+
    | date       |
    +------------+
    | 2019-01-02 |
    +------------+
    

    下面我们扩展下这个代码,我们要得到2019年1月1号后5天的数据集,这时我们可以使用range函数。

    neo4j> WITH date("2019-01-01") AS startDate
         RETURN [day in range(0, 5) | startDate + duration({days: day})]
         AS dates;
    +--------------------------------------------------------------------------+
    | dates                                                                    |
    +--------------------------------------------------------------------------+
    | [2019-01-01, 2019-01-02, 2019-01-03, 2019-01-04, 2019-01-05, 2019-01-06] |
    +--------------------------------------------------------------------------+
    

    如果你知道想要的天数,你会发现,通过上面的示例可以很容易获取这些天的集合。但是,如果我们仅知道开始日期和结束日期,要如何获取这中间天数的集合呢?这时我们就可以试试duration.inDays函数了,它能计算两个日期之间的范围。

    neo4j> RETURN duration.inDays(date("2019-01-01"), date("2019-01-06")) AS difference;
    +------------+
    | difference |
    +------------+
    | P0M5DT0S   |
    +------------+
    

    这是什么鬼?别急,inDays返回的是一个对象,可以通过days属性得到天数。

    neo4j> RETURN duration.inDays(date("2019-01-01"), date("2019-01-06")).days AS days;
    +------+
    | days |
    +------+
    | 5    |
    +------+
    

    下面我们更新一下最开始的示例,用开始日期和结束日期去替换到Cypher查询语句中硬编码的天数。

    neo4j> WITH date("2019-01-01") AS startDate, date("2019-01-06") AS endDate
           WITH startDate, duration.inDays(startDate, endDate).days AS days
           RETURN [day in range(0, days) | startDate + duration({days: day})]
           AS dates;
    +--------------------------------------------------------------------------+
    | dates                                                                    |
    +--------------------------------------------------------------------------+
    | [2019-01-01, 2019-01-02, 2019-01-03, 2019-01-04, 2019-01-05, 2019-01-06] |
    +--------------------------------------------------------------------------+
    

    OK,关于Cypher日期范围的操作就是这么简单,希望对你有用。

    相关文章

      网友评论

          本文标题:Neo4j:Cypher的时间日期范围操作

          本文链接:https://www.haomeiwen.com/subject/jjppuqtx.html