0

我在这个查询中做错了什么?

SELECT * FROM TreatmentPlanDetails 
WHERE 
   accountId = 'ag5zfmRvbW9kZW50d2ViMnIRCxIIQWNjb3VudHMYtcjdAQw' AND 
   status = 'done' AND 
   category = 'chirurgia orale' AND
   setDoneCalendarEventStartTimestamp >= [timestamp for 6 june 2012]  AND 
   setDoneCalendarEventStartTimestamp <= [timestamp for 11 june 2012]  AND 
   deleteStatus = 'notDeleted' 
ORDER BY setDoneCalendarEventStartTimestamp ASC

我没有得到任何记录,我确信有记录满足 where 子句条件。为了获得正确的记录,我必须将时间戳间隔扩大 1 毫秒。正常吗?此外,如果我通过删除类别过滤器来修改此查询,我会得到正确的结果。这绝对是奇怪的。我也在谷歌群组上问过,但我没有得到答案。无论如何,有关详细信息: https ://groups.google.com/forum/?fromgroups#!searchin/google-appengine/query/google-appengine/ixPIvmhCS3g/d4OP91yTkrEJ

4

3 回答 3

1

让我们具体谈谈创建时间戳以进入查询。您使用什么代码来创建时间戳记录?显然这很重要,因为对其进行模糊测试会影响查询。可能相关的是,在数据存储中,时间戳被记录为整数,表示以微秒为单位的 posix 时间戳,即自 1970 年 1 月 1 日以来的微秒数(不包括闰秒)。日期(即没有时间)表示为午夜也很重要,即当天最早的时间。但请告诉我们确切的代码。(显示您尝试检索的记录的实际内容也可能很重要。)

于 2012-06-14T14:56:18.190 回答
1

An aside that is not specific to your question: Entity property names count as part of your storage quota. If this is going to be a huge dataset, you might pay more $$ than you'd like for property names like setDoneCalendarEventStartTimestamp.

于 2012-06-14T15:58:31.513 回答
0

因为你写:

如果我通过删除类别过滤器来修改此查询,我会得到正确的结果

这可能意味着在您将匹配记录写入数据存储时,该类别没有被索引。如果要将记录添加到新创建的索引中,则必须将记录重新写入数据存储。

于 2012-06-14T11:23:16.333 回答