2017-06-14 99 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

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