格式化日期时间查询时出现 GQL 错误

GQL error when formatting datetime query

我正在尝试格式化在两个日期之间提取数据的 GQL 查询。我已经参考了几个现有的 Whosebug 线程(例如 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 对象,我能想到的每种格式都会给我某种错误。我做错了什么?

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

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

DATETIME DATETIME() represents a timestamp. must be in the time format specified in RFC 3339 section 5.6. (However, the second precision is limited to microseconds and leap seconds are omitted.) This standard format is: 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

感谢您评论这个问题。

有了每个人的答案,我可以做一个非常简单的(但在 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')

Where "2018-09-09T00:00:00.00000-03:00" is the full datetime value and it means:

  • 2018-09-09 -> Date Indicator (YYYY-MM-DD in my case)
  • T -> Indicator that the next values are Time values
  • 00:00:00.00000 -> Time Indicator (HH:mm:ss:[miliseconds])
  • -03:00 -> Time Zone indicator (Chile in my case)

我真的希望这个 post 对使用 GQL

在日期方面遇到同样问题的任何人有用