例如
SELECT *
FROM api_call_log
WHERE account_sid='XXXXXXXXXXXX' AND
created_time >= 01-02-2016 00:00:00 AND
created_time <= 31-02-2016 23:59:59
ALLOW FILTERING
虽然我搜索了第二个月,但我还是获得了第一个月的记录。
答案 0 :(得分:1)
如果没有看到您的表格结构或结果集的相关部分,很难说。但我确实注意到你不指定GMT偏移量,这意味着您实际上 通过默认本地偏移 进行查询。问题是,Cassandra按GMT + 0000存储。
例如,如果您的GMT偏移量为负-0600(与我一样),则对GMT-0600的查询将从2月1日起错过6小时的数据。例如,如果2016-02-01 01:00:00+0000
有一行,则此查询不会返回它:
aploetz@cqlsh:stackoverflow> SELECT * FROm events WHERe monthbucket='201602'
AND eventdate >= '2016-02-01 00:00:00';
monthbucket | eventdate | beginend | eventid | eventname
-------------+-----------+----------+---------+-----------
(0 rows)
那是因为2016-02-01 01:00:00+0000
基本上是2016-01-31 19:00:00-0600
。因此,如果我添加0000
的GMT偏移量,我会看到该行。
aploetz@cqlsh:stackoverflow> SELECT * FROm events WHERe monthbucket='201602'
AND eventdate >= '2016-02-01 00:00:00+0000';
monthbucket | eventdate | beginend | eventid | eventname
-------------+--------------------------+----------+--------------------------------------+-------------------
201602 | 2016-02-01 01:00:00+0000 | b | 78d2c2b7-c4ec-408f-be37-eccc0c05727d | test month border
(1 rows)
我的猜测是,由于具有正 GMT偏移,您可能会遇到相反的问题(额外的行与丢失的行)。在查询中未指定偏移量可能是包含上个月的行的原因。如果是这种情况,那么您可能需要这些行。
另外,请勿使用ALLOW FILTERING
。像往常一样。
答案 1 :(得分:-1)
试试这个
SELECT * FROM api_call_log WHERE account_sid='XXXXXXXXXXXX' AND jobs.created_at between '01-02-2016 00:00:00' and '31-02-2016 23:59:59';
并检查日期列的日期/时间格式