日期时间比较查询没有 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)
在那之后,我就可以进行比较了。
希望这可以为未来的开发人员节省几个小时。
我正在尝试进行简单的日期时间比较,但查询 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)
在那之后,我就可以进行比较了。
希望这可以为未来的开发人员节省几个小时。