日期时间比较查询没有 return 任何结果

Datetime comparison query doesn't return any results

我正在尝试进行简单的日期时间比较,但查询 return 没有任何结果。

查询是

MATCH (n:Event) WHERE n.start_datetime > datetime("2019-06-01T18:40:32.142+0100")  RETURN n.start_datetime

根据 this documentation page,这种类型的比较应该有效。我也尝试过显式创建 datetime 对象,例如 datetime({year: 2019, month: 7}).

我检查 start_datetime 实际上格式正确,例如检查值 start_datetime.year 是否正确,并且没有发现任何错误。 鉴于数据库中的所有记录都来自 2021 年,上述查询应该 return 每个事件,但 return 什么都没有。

仅使用年份比较而不是进行完整的日期时间比较来进行查询:

MATCH (n:Event) WHERE n.start_datetime.year > datetime("2019-06-01T18:40:32.142+0100").year  RETURN n.start_datetime

仔细检查 start_datetime 的数据类型。它可以是纪元秒或纪元毫秒。您需要将纪元格式转换为日期时间,以便两者属于同一数据类型。您的第二个查询起作用的原因 (.year) 是因为 .year returns 一个整数值。

运行 下面获取示例:

 MATCH (n:Event) 
 RETURN distinct n.start_datetime LIMIT 5

然后如果你看到它是10位数字那么它是在epochSeconds。如果是,则运行下面的查询:

 MATCH (n:Event) 
 WHERE n.start_datetime is not null 
 AND datetime({epochSeconds: n.start_datetime}) > datetime("2019-06-01T18:40:32.142+0100") 
 RETURN n.start_datetime 
 LIMIT 25

原来是时区问题。 Neo4j 将属性保存为 LocalDateTime,这显然无法与 ZonedDateTime.

相提并论

我使用 py2neo 进行大部分节点管理,解决方案是给 python 属性 一个特定的时区。这是完成的(在我的例子中)使用:

datetime.datetime.fromtimestamp(kwargs["end"], pytz.UTC)

在那之后,我就可以进行比较了。

希望这可以为未来的开发人员节省几个小时。