我正在尝试格式化在两个日期之间提取数据的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对象,我能想到的每种格式都会给我一些错误。我究竟做错了什么?
错误是正确的,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
感谢您对此问题发表评论。
有了每个答案,我可以很容易地(但在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日期都有同样问题的人都有用