2012-11-19 14 views
7

Làm cách nào để bạn viết truy vấn SQL có ngày sử dụng RSQLite. Đây là một ví dụ bên dưới. dbGetQuery không trả lại bất kỳ hàng nào.Sử dụng ngày tháng với 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

Tôi tin rằng SQLite không có bất kỳ loại ngày gốc nào. Tôi đã luôn luôn lưu trữ chúng dưới dạng văn bản. Ví dụ, tất cả các hàm ngày/giờ của SQLite (như 'date()') hành động trên một chuỗi, không phải là một "đối tượng ngày" hoặc số nguyên. – joran

Trả lời

9

Chỉ để minh họa, điều này hoạt động tốt:

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

Bạn có thể đọc về việc thiếu các loại ngày mẹ đẻ trong SQLite trong tài liệu here. Tôi đã sử dụng chuỗi như ngày tháng trong SQLite mà tôi thực sự đã quên hoàn toàn vấn đề.

Và có, tôi đã viết một hàm R nhỏ có thể chuyển đổi bất kỳ cột Ngày nào trong một khung dữ liệu thành ký tự. Để so sánh đơn giản, việc giữ chúng trong YYYY-MM-DD là đủ và nếu tôi cần làm số học tôi chuyển đổi chúng sau khi thực tế trong R.

+0

Cảm ơn, công trình này hoàn hảo. – jbryer

+0

@joran - bạn có sẵn sàng chia sẻ chức năng chuyển đổi cột ngày không? – boshek

+1

@ boshek Không có gì đặc biệt, vì trong trường hợp cụ thể này, tôi biết chắc chắn rằng định dạng sẽ luôn là YYYY-MM-DD, vì vậy tôi chỉ lặp lại các cột, kiểm tra xem đó là lớp Date và sau đó ép nó vào ký tự. – joran

Các vấn đề liên quan