【问题标题】:GQL error when formatting datetime query格式化日期时间查询时出现 GQL 错误
【发布时间】:2017-11-16 22:21:27
【问题描述】:

我正在尝试格式化在两个日期之间提取数据的 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 对象,我能想到的每种格式都会给我一些错误。我做错了什么?

【问题讨论】:

    标签: google-app-engine datetime gql


    【解决方案1】:

    感谢您对这个问题发表评论。

    根据每个人的答案,我可以进行非常简单(但在 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 遇到同样问题的人有用

    【讨论】:

      【解决方案2】:

      错误没错,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

      【讨论】:

      • 我试过这个,小心设置日期范围以匹配我验证的实体在数据存储中:SELECT * FROM Packets WHERE timestamp > DATETIME('2017-04-03T09:30:20.00002-08 :00') AND timestamp
      • 确保您的“时间戳”属性已编入索引。如果它没有被索引,则不会返回任何结果,也不会出错。
      • 是的,已编入索引。
      • 也许匹配查询的实体没有被索引?一种类型的实体可以混合(索引/未索引)
      • 我想通了。查询中的错字。
      猜你喜欢
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 2023-01-31
      • 1970-01-01
      • 2010-12-20
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多