4

日付がこの形式で保存される日付列を持つテーブルがあります。

2012-08-01 16:39:17.601455+0530

このコラムではどうすればいいですgroupか?group_and_countmonth

4

2 に答える 2

8

あなたの最大の問題は、SQLite が日付を日付として直接認識しないことです。

CREATE TABLE YOURTABLE (DateColumn date);
INSERT INTO "YOURTABLE" VALUES('2012-01-01');
INSERT INTO "YOURTABLE" VALUES('2012-08-01 16:39:17.601455+0530');

strftime() を使用して月を取得しようとすると。. .

sqlite> select strftime('%m', DateColumn) from yourtable;
01

. . . 最初の行から月を取得しますが、2 番目の行からは取得しません。

既存のデータを有効なタイムスタンプとして再フォーマットできる場合 (SQLite に関する限り)、この比較的単純なクエリを使用して年と月でグループ化できます。(ほとんどの場合、月だけでグループ化する必要はありません。)

select strftime('%Y-%m', DateColumn) yr_mon, count(*) num_dates 
from yourtable 
group by yr_mon;

それができない場合は、文字列の解析を行う必要があります。これがこの考えの最も簡単な表現です。

select substr(DateColumn, 1, 7) yr_mon, count(*) num_dates 
from yourtable 
group by yr_mon;

しかし、それはあなたにとってうまくいかないかもしれません。タイムゾーン情報があるため、一部の値の月が必ず変更されます。完全に一般的な解決策を得るには、タイムゾーンを修正したり、年と月を抽出したりする必要があると思います。より単純なアプローチは、このデータをよく見て、「私はそれらのエッジケースを説明することに興味がない」と宣言し、すぐ上のより単純なクエリを使用することです.

于 2012-09-08T15:01:22.483 に答える