Преобразование строки в дату и использование запроса больше оператора не работает должным образом в Кассандре - PullRequest
0 голосов
/ 30 апреля 2019

Я использую cassandra 2.2.3 и ниже моя структура таблицы для хранения doj как объекта даты.

Table structure:

class Emp{

String name
Date doj
}
empdata:

id                  name                          doj
1                   Test                         2010-01-01 00:00:00+0000
2                   Test1                        2011-01-01 00:00:00+0000

Я должен использовать оператор больше или меньше, чтобы выбирать сотрудников между этими датами.

Из json я получаю следующий вход для отображения данных.

{
"dateFrom":'1/1/2010'
}

// Модифицированная строка до даты с использованием SimpleDateFormat

Date d1 = f.parse(dateFrom);
long milliseconds = d1.getTime(); 

// Запрос вызова с использованием оператора gte для извлечения данных из Кассандры

Select selectQuery = QueryBuilder.select().all().from(tableName).allowFiltering()
Where selectWhere = selectQuery.where();
rangeClause(selectWhere,dateFrom,Tue Jan 01 00:00:00 PST 2010);
Statement s = selectWhere.limit(1)
println("st is:"+s); 

In the select statement i see the query as "SELECT * FROM emp WHERE doj>=1551427200000  LIMIT 1;


//Function Call

 def rangeClause(Where selectWhere, String columnName, Object columnValue) 
    {
    Clause whereClause = null
    whereClause= QueryBuilder.gte(columnName, columnValue.get("dateFrom"))
    selectWhere.and(whereClause)
    }

1 Ответ

1 голос
/ 30 апреля 2019

dateFrom - это временная метка (длинная), которая составляет 8 байтов, а вы передаете ей строку '2010-01-05', которая составляет 10 байтов. Вам необходимо преобразовать эту строку даты в epoc timestamp (long) или Date.

...