2012-11-19 9 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 के पास कोई मूल दिनांक प्रकार नहीं है। मैंने हमेशा उन्हें पाठ के रूप में संग्रहित किया है। उदाहरण के लिए, सभी 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 में इतने लंबे समय तक स्ट्रिंग्स का उपयोग कर रहा हूं कि मैं वास्तव में पूरी तरह से इस मुद्दे के बारे में भूल गया था।

और हाँ, मैंने एक छोटा आर फ़ंक्शन लिखा है जो डेटा फ्रेम में किसी भी दिनांक कॉलम को चरित्र में परिवर्तित करता है। सरल तुलना के लिए, उन्हें YYYY-MM-DD में रखते हुए पर्याप्त है, और यदि मुझे अंकगणित करने की आवश्यकता है तो मैं उन्हें आर

+0

धन्यवाद, यह सही काम करता है। – jbryer

+0

@joran - क्या आप उस समारोह को साझा करने के इच्छुक होंगे जो दिनांक कॉलम को परिवर्तित करता है? – boshek

+1

@ बोशेक यह कुछ खास नहीं है, क्योंकि इस विशेष मामले में मुझे 100% निश्चितता के साथ पता है कि प्रारूप हमेशा वाई वाई वाई-एमएम-डीडी होगा, इसलिए मैं सिर्फ कॉलम पर लूप करता हूं, परीक्षण करता हूं कि यह डेट क्लास है और उसके बाद इसे चरित्र के लिए मजबूर करता है। – joran