SQLでは、次のことができます。
select getdate(), getdate() - 7
現在の日付と現在の日付を返す-7日間。 Cassandra CQLで同じことを実現したいのですが、試しました:
select dateof(now())
しかし、それはうまくいきません。挿入時にのみ機能し、選択時には機能しません。どうすれば同じことができますか?任意の助けいただければ幸いです。
select dateof(now())
それ自体では、あなたは正しいです、それは機能しません。しかし、行が1つしかないことがわかっているテーブルがある場合(system.local
など):
aploetz@cqlsh:stackoverflow> SELECT dateof(now()) FROM system.local ;
dateof(now())
--------------------------
2015-03-26 03:18:39-0500
(1 rows)
残念ながら、Cassandra CQLには(まだ? CASSANDRA-5505 )は算術演算のサポートが含まれていません。日付の算術演算はもちろんです。そのため、その値から7日を引くと、アプリケーションレベルで行う必要があります。
1つの行、多くの行、またはまったくない場合でも、読み取りアクセス権を持つ任意のテーブルで機能する別の可能なソリューション:
_SELECT toTimestamp(now()) AS now, count(*) FROM any_table WHERE partition_key=xyz;
_
ここでの違いは、集計関数COUNT(*)
は、結果セットに常に1行のみが含まれることを保証することです。
明らかに、_any_table
_を読み取りアクセス権を持つテーブルに置き換え、WHERE句をテーブルパーティションキーを完全に指定するものに置き換えます。この場合も、パーティションキーの指定された値と一致する実際の行は必要ないため、適切なタイプの値をハードコードできます。
余談
dateof()
はCassandra 2.2.0-rc2で廃止されました。それ以降のバージョンでは、その使用をtoTimestamp()
に置き換える必要があります。