내 목표는 지금부터 일정한 시간을 제거하는 것입니다. 그래서 나는 항상 마지막 5 분, 또는 마지막 5 시간을 얻는다.CQL에서 datetimes를 사용하여 산술을 수행하는 방법
어떻게하면됩니까? 카산드라에
The documentation는 말한다 :
기간이 (+)를 추가하거나 substracted 할 수 있습니다 - 타임 스탬프 또는 새로운 타임 스탬프 또는 날짜를 제작하는 일로부터(). 예를 들어 그래서 :
SELECT * FROM myTable WHERE t = '2017-01-01' - 2d
이cqlsh
내부 2016
의 마지막 2 일 내에입니다 t의 값을 모든 레코드를 선택합니다 show version;
저를 제공합니다
[cqlsh 5.0.1 | Cassandra 3.11.0 | CQL spec 3.4.4 | Native protocol v4]
I을 다음 표를 사용하여 테스트 :
cqlsh:> CREATE TABLE t (
... ts timestamp,
... PRIMARY KEY (ts)
...)
... WITH compression = {'class': 'LZ4Compressor'}
... AND gc_grace_seconds = 60;
ERY 작동 :
SELECT (float)1.55 FROM t WHERE (ts <= toTimestamp(now()));
다음과, 그렇지 않은 :
cqlsh:> SELECT (float)1.55 FROM t WHERE (ts <= toTimestamp(now() - 1d));
SyntaxException: line 1:57 mismatched input '-' expecting ')' (...ts <= toTimestamp(now() [-]...)
cqlsh:> SELECT (float)1.55 FROM t WHERE (ts <= toTimestamp(now()) - 1d);
SyntaxException: line 1:58 mismatched input '-' expecting ')' (... <= toTimestamp(now()) [-]...)
cqlsh:> SELECT (float)1.55 FROM t WHERE (ts <= toTimestamp(now()) - 1m);
SyntaxException: line 1:58 mismatched input '-' expecting ')' (... <= toTimestamp(now()) [-]...)
cqlsh:> SELECT (float)1.55 FROM t WHERE ts <= toTimestamp(now()) - 1m;
SyntaxException: line 1:57 mismatched input '-' expecting EOF (... <= toTimestamp(now()) [-]...)
cqlsh:> SELECT (float)1.55 FROM t WHERE ts = toTimestamp(now()) - 1m;
SyntaxException: line 1:56 mismatched input '-' expecting EOF (... = toTimestamp(now()) [-]...)
당신이 기간을 빼지하려고 할 때 오류가 -
에 대해 항상 볼 수 있듯이. (덧붙여 결과는 +
와 동일합니다)
내가 뭘 잘못 했습니까? 그것을 성취 할 수있는 방법이 있을지 모르지만 나는 그것을 알 수 없다! @ Ashraful - 이슬람에 의해 제안 공식적으로
솔루션
, 내 솔루션은 작업을 할 수있는 UDF를 만들 수있다. 아래 참조 : 카산드라에 도입CREATE FUNCTION IF NOT EXISTS timeAgo(minutes int)
CALLED ON NULL INPUT
RETURNS timestamp
LANGUAGE java AS '
long now = System.currentTimeMillis();
if (minutes == null)
return new Date(now);
return new Date(now - (minutes.intValue() * 60 * 1000));
';
-- So I can do
SELECT timeAgo(60) FROM t;
어서 오세요! 그들은 적어도 "최신"이라는 말은 "불안정"을 의미 할뿐만 아니라 어느 부분이 안정적인지 아닌지를 나타낼 수 있습니다 ... 감사합니다. 제 질문을 업데이트하여 좀 더 건설적으로 만드십시오. – Micka
@Micka 업데이트 된 답변 확인 –
굉장! 고맙습니다! – Micka