首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RSQLite中使用日期

在RSQLite中使用日期
EN

Stack Overflow用户
提问于 2012-11-20 04:57:23
回答 4查看 4.7K关注 0票数 15

如何使用RSQLite编写带日期的SQL查询。下面是一个例子。dbGetQuery不返回任何行。

代码语言:javascript
复制
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')")
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-20 05:26:55

为了说明这一点,它工作得很好:

代码语言:javascript
复制
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中转换它们。

票数 13
EN

Stack Overflow用户

发布于 2021-04-26 12:01:10

根据@joran的回答,下面是一个简单的函数,用于将日期列转换为data.frame的字符串。

代码语言:javascript
复制
mutate(df, across(where(is.Date), ~ format(.x, "%Y.%m.%d")))
票数 1
EN

Stack Overflow用户

发布于 2021-12-22 16:47:06

我发现使用RSQLitedplyr是使用R和SQLite保持类型一致的最方便的方法。特别是,extendend_types = TRUE确保DATEDATETIME / TIMESTAMPTIME类型的列被映射到相应的R类(至少在RSQLite的2.2.8版之后)。

代码语言:javascript
复制
library(dplyr)
library(RSQLite)
library(ggplot2)

data(presidential)

mydb <- dbConnect(SQLite(), "presidential.sqlite", extended_types = TRUE)
dbWriteTable(mydb, "presidential", presidential)

tbl(mydb, "presidential") %>% 
  filter(start >= as.Date("1980-01-01")) %>% 
  collect()

您还可以将后一个集合格式化为get查询:

代码语言:javascript
复制
dbGetQuery(mydb, "SELECT * FROM presidential WHERE start >= CAST('1980-01-01' AS DATE)")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13462086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档