gpt4 book ai didi

date - Neo4j 日期和日期时间比较问题

转载 作者:行者123 更新时间:2023-12-04 14:17:50 24 4
gpt4 key购买 nike

我发现 neo4j 引擎有一个非常奇怪的行为。假设我们有具有日期和日期时间类型属性的节点:

merge (n:Item {date: date("2019-10-21"), datetime: datetime("2019-10-21") }  )
return n

这些查询工作正常:

match (n:Item)
where n.date>=date("2019-10-20")
return n
match (n:Item)
where n.datetime>=datetime("2019-10-20")
return n

当我尝试比较日期与日期时间(或日期时间与日期)时,空数据集返回:

match (n:Item)
where n.date>=datetime("2019-10-20")
return n
match (n:Item)
where n.datetime>=date("2019-10-20")
return n

Neo4j 版本为 3.5.11。

最佳答案

在 neo4j 中,您不能直接比较不同类型的时间值(例如,datedatetime)。

  1. 对于您的用例,您可以在进行比较之前将 date 转换为 datetime

    例如,您的最后 2 个查询可以将 date 转换为 datetime:

    MATCH (n:Item)
    WHERE datetime({date:n.date}) >= datetime("2019-10-20")
    RETURN n;


    MATCH (n:Item)
    WHERE n.datetime >= datetime({date:date("2019-10-20")})
    RETURN n;
  2. 但是对于您的用例,将 datetime 转换为 date 也是有效的(并且可能更有效)(注意可以传递一个 datetime 作为 date 属性值):

    MATCH (n:Item)
    WHERE n.date >= date({date: datetime("2019-10-20")})
    RETURN n;


    MATCH (n:Item)
    WHERE date({date: n.datetime}) >= date("2019-10-20")
    RETURN n;
  3. 另一种方法是比较 yearordinalDay 值,如:

    WITH datetime("2019-10-20") AS dt
    MATCH (n:Item)
    WHERE n.date.year >= dt.year AND n.date.ordinalDay >= dt.ordinalDay
    RETURN n;

    WITH date("2019-10-20") AS d
    MATCH (n:Item)
    WHERE n.datetime.year >= d.year AND n.datetime.ordinalDay >= d.ordinalDay
    RETURN n;

关于date - Neo4j 日期和日期时间比较问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58491805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com