2017-06-14 62 views
2

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

这里是我试图使用查询:

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对象,我能想到的每种格式都会给我一些错误。我究竟做错了什么?

回答

2

错误是正确的,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

+0

这个我试过,小心设置日期范围相匹配的实体我验证了数据store: SELECT * FROM数据包WHERE时间戳> DATETIME('2017-04-03T09:30:20.00002-08:00')和时间戳

+0

确保您的'timestamp'属性已建立索引。如果没有编入索引,则不会返回结果,也不会返回错误。 –

+0

是的,它已被编入索引。 –