2012-11-19 9 views
7

Wie schreiben Sie eine SQL-Abfrage mit einem Datum mithilfe von RSQLite. Hier ist ein Beispiel unten. Die dbGetQuery gibt keine Zeilen zurück.Verwenden von Daten mit 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

Ich glaube, SQLite hat keine nativen Datumstypen. Ich habe sie immer als Text gespeichert. Zum Beispiel wirken alle SQLite-Datum/Uhrzeit-Funktionen (wie "date()") auf eine Zeichenkette, nicht auf ein "Datumsobjekt" oder eine Ganzzahl. – joran

Antwort

9

Nur um zu veranschaulichen, das funktioniert gut:

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'") 

Sie können here über den Mangel an einheimischen Terminarten in SQLite in der Dokumentation lesen. Ich habe Saiten als Daten für so lange in SQLite verwendet, dass ich das Problem komplett vergessen hatte.

Und ja, ich habe eine kleine R-Funktion geschrieben, die eine Datumsspalte in einem Datenrahmen in ein Zeichen umwandelt. Für einfache Vergleiche reicht es, sie in YYYY-MM-DD zu halten, und wenn ich arithmetisch arbeiten muss, wandle ich sie nach der Tatsache in

+0

Danke, das funktioniert perfekt. – jbryer

+0

@joran - wären Sie bereit, diese Funktion zu teilen, die die Datumsspalte konvertiert? – boshek

+1

@boshek Es ist nichts besonderes, da ich in diesem speziellen Fall mit 100% Sicherheit weiß, dass das Format immer YYYY-MM-DD sein wird, also schreibe ich einfach über Spalten, teste, ob es eine Date-Klasse ist und zwinge sie dann zum Zeichen. – joran

Verwandte Themen