我正在尝试格式化在两个日期之间提取数据的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对象,我能想到的每种格式都会给我带来某种错误。我做错了什么?
答案 0 :(得分: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
答案 1 :(得分: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遇到同样麻烦的人有用