格式化datetime查询时出现GQL错误

问题描述 投票:3回答:2

我正在尝试格式化在两个日期之间提取数据的GQL查询。我已经提到了几个现有的StackOverflow线程(例如GQL SELECT by date),并尝试按照那里显示的格式,但出于某种原因,当我测试我的查询时,它给了我一个错误。

这是我试图使用的查询:

SELECT * FROM Packets WHERE timestamp > DATETIME(2017,12,23) AND timestamp < DATETIME(2017,12,29) LIMIT 10

它给出了这个错误:

"GQL query error: Encountered "2017" at line 1, column 50. Was expecting one of: <SINGLE_QUOTE_STRING>, <DOUBLE_QUOTE_STRING>"

我已经尝试将日期包含在字符串中,我尝试使用DATE对象,我能想到的每种格式都会给我一些错误。我究竟做错了什么?

google-app-engine datetime gql
2个回答
3
投票

错误是正确的,DATETIME方法需要一个字符串参数。

根据GQL参考,要在查询中实例化DATETIME,格式必须为'YYYY-MM-DDThh:mm:ss.SSSSSS + zz:ZZ':

DATETIME DATETIME()表示时间戳。必须采用RFC 3339第5.6节中规定的时间格式。 (但是,第二个精度限制为微秒,省略闰秒。)此标准格式为:YYYY-MM-DDThh:mm:ss.SSSSSS + zz:ZZ ...

你的例子工作:

SELECT * FROM Packets WHERE timestamp > DATETIME('2013-09-20T09:30:20.00002-08:00') AND timestamp < DATETIME('2013-09-29T09:30:20.00002-08:00') LIMIT 10

你可以在这里查看完整的文章:https://cloud.google.com/datastore/docs/reference/gql_reference


0
投票

感谢您对此问题发表评论。

有了每个答案,我可以很容易地(但在GQL中几乎不可能)查询。

看看这个,我希望它会对某人有所帮助:

SELECT * FROM Task WHERE recordDate >= DATETIME('2018-09-09T00:00:00.00000-03:00') 
AND recordDate <= DATETIME('2018-09-20T23:59:59.99999-03:00')

其中“2018-09-09T00:00:00.00000-03:00”是完整的日期时间值,它表示:

  • 2018-09-09 - >日期指标(在我的情况下为YYYY-MM-DD)
  • T - >指示下一个值是时间值
  • 00:00:00.00000 - >时间指示器(HH:mm:ss:[毫秒])
  • -03:00 - >时区指示器(我的智利)

我真的希望这篇文章对任何使用GQL日期都有同样问题的人都有用

© www.soinside.com 2019 - 2024. All rights reserved.