使用Cassandra 2.28,Drive 3,Sparks2。
我在Cassandra中有一个时间戳列,只有才能按日期部分查询。如果我按日期查询:.where("TRAN_DATE= ?", "2012-01-21"
:它不会带来任何结果。如果我包含时间部分,则表示无效日期。我的数据(我可以在cqlsh中看到)是:2012-01-21 08:01:00 + 0000
param:" 2012-01-21" >没有错误但没有结果
param:" 2012-01-21 08:01:00" > 错误:日期无效
param:" 2012-01-21 08:01:00 + 0000" > 错误:日期无效
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(" yyyy / mm / dd"); TRAN_DATE = DATE_FORMAT.parse(" 1/19 / 2012"); 已使用批量加载程序/ SSLoader加载表
表格中的数据:
tran_date | id
--------------------------+-------
2012-01-14 08:01:00+0000 | ABC
2012-01-24 08:01:00+0000 | ABC
2012-01-23 08:01:00+0000 | ALM
2012-01-29 08:01:00+0000 | ALM
2012-01-13 08:01:00+0000 | ATC
2012-01-15 08:01:00+0000 | ATI
2012-01-18 08:01:00+0000 | FKT
2012-01-05 08:01:00+0000 | NYC
2012-01-11 08:01:00+0000 | JDU
2012-01-04 08:01:00+0000 | LST
我该如何解决这个问题。
谢谢
答案 0 :(得分:1)
如果您将数据插入时间戳列而不提供如下所示的时区:
<?php
$serverName = "Host";
$params = array();
$cursorType = array("Scrollable" => 'keyset');
$connectionInfo = array("UID"=>"usernam", "PWD"=>"pass", "Database"=>"db", "CharacterSet" => "UTF-8");
$conn = sqlsrv_connect($serverName, $connectionInfo);
$sqlstr1 =sqlsrv_query($conn,"my uqery",$params,$cursorType);
$count=sqlsrv_num_wors($sqlstr1);
```````return TRUE;(written in code above)````` what it reutrns?
Is it same as SQLSRV_FETCH_ARRAY?
?>
Cassandra将选择协调员时区
如果未指定时区,则使用处理写请求的Cassandra协调器节点的时区。为了准确起见,DataStax建议指定时区,而不是依赖于Cassandra节点上配置的时区。
如果使用Datastax Driver执行select,则需要将String date转换为java.util.Date并设置协调器节点的时区,在我的情况下,它是GMT + 6
INSERT INTO timestamp_test (tran_date , id ) VALUES ('2016-12-19','TMP')
现在您可以使用
进行查询DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-01-21");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+6")); //Change this time zone
这是一个完整的演示:
QueryBuilder.eq("TRAN_DATE", date)
来源:https://docs.datastax.com/en/cql/3.0/cql/cql_reference/timestamp_type_r.html