2012-11-19 3 views
7

RSQLiteを使用して日付を含むSQLクエリを作成する方法を教えてください。以下はその例です。 dbGetQueryは行を返しません。ただ、説明するRSQLiteで日付を使用する

require(RSQLite) 
require(ggplot2) 
data(presidential) 
m <- dbDriver("SQLite") 
tmpfile <- tempfile('presidential', fileext='.db') 
conn <- dbConnect(m, dbname=tmpfile) 
dbWriteTable(conn, "presidential", presidential) 
dbGetQuery(conn, "SELECT * FROM presidential WHERE Date(start) >= Date('1980-01-01')") 
+2

私はSQLiteにネイティブな日付型がないと信じています。私はいつもそれらをテキストとして保存しています。例えば、 'date()'のような)すべてのSQLiteの日付/時刻関数は、文字列であり、日付オブジェクトや整数ではありません。 – joran

答えて

9

、これは正常に動作します:

tmpfile <- tempfile('presidential', fileext='.db') 
conn <- dbConnect(m, dbname=tmpfile) 
p <- presidential 
p$start <- as.character(p$start) 
p$end <- as.character(p$end) 

dbWriteTable(conn, "presidential", p) 
dbGetQuery(conn, "SELECT * FROM presidential WHERE start >= '1980-01-01'") 

あなたはドキュメントhereでSQLiteのでネイティブ日付タイプの欠如について読むことができます。私はSQLiteで長年の日付として文字列を使用していましたが、実際にこの問題について完全に忘れてしまいました。

はい、データフレーム内の任意の日付列を文字に変換する小さなR関数を作成しました。簡単な比較のために、それらをYYYY-MM-DDに保持するだけで十分です。私が算術演算を行う必要がある場合は、Rの事実の後でそれらを変換します。

+0

ありがとう、これは完璧に動作します。 – jbryer

+0

@joran - あなたは日付の列を変換するその関数を共有してもよろしいですか? – boshek

+1

@boshekこの特殊なケースでは、フォーマットが常にYYYY-MM-DDであることを100%確信しているので、何も特別なことはないので、カラムをループし、Dateクラスかどうかテストして文字に変換します。 – joran

関連する問題