【发布时间】:2017-04-20 13:59:42
【问题描述】:
当我在 DataStax DevCenter 中进行此查询时,将返回 2 行。返回的行应该是 12 月 30 日的敌人。
SELECT * FROM abc.alerts_by_type_and_timestamp WHERE alert_type IN ('Permanent Fault', 'Temporary Fault') AND alert_timeStamp >= '2015-12-30T15:00+0000' AND alert_timeStamp <= '2015-12-31T15:00+0000'
但是像这样在 PreparedStatement 中运行
SELECT * FROM abc.alerts_by_type_and_timestamp WHERE alert_type IN :alertTypes AND alert_timeStamp >= :minTimestamp AND alert_timeStamp <= :maxTimestamp
返回 4 行以下。
17:52:48,587 INFO [stdout] (default task-39) minTimestamp: 2015-12-30 15:00:00.0 - maxTimestamp : 2015-12-31 15:00:00.0
17:52:50,904 INFO [stdout] (default task-39) row : Row[Permanent Fault, Thu Dec 31 12:09:22 PST 2015, 2015, 365, .....]
17:52:50,904 INFO [stdout] (default task-39) row : Row[Permanent Fault, Thu Dec 31 12:08:14 PST 2015, 2015, 365, ....]
17:52:50,905 INFO [stdout] (default task-39) row : Row[Temporary Fault, Thu Dec 31 12:09:22 PST 2015, 2015, 365, ...]
17:52:50,906 INFO [stdout] (default task-39) row : Row[Temporary Fault, Thu Dec 31 12:08:14 PST 2015, 2015, 365, ...]
17:52:50,906 INFO [stdout] (default task-39) count is : 4
我相信这是由于时间转换。数据存储为 GMT,但 PreparedStatement 以某种方式在 PST 中传递它??
我该如何解决这个问题?
我也试过这个:
DateTime dateTime = new DateTime(minTimestamp.getTime(), DateTimeZone.UTC);
DateTime dateTime2 = new DateTime(maxTimestamp.getTime(), DateTimeZone.UTC);
BoundStatement stmtByAlertTypeAndTimestamp = pStmt.bind()
.setTimestamp("minTimestamp", new Timestamp(dateTime.getMillis()))
.setTimestamp("maxTimestamp", new Timestamp(dateTime2.getMillis()))
.setList("Types", Types);
在日期时间打印出时间:
minTimestamp: 2016-07-19 17:00:00.0
maxTimestamp: 2016-07-26 00:00:00.0
谢谢
【问题讨论】:
标签: cassandra datastax cql3 datastax-java-driver