使用RSQLite 1.0.0软件包从SQLite 3数据库中提取数据时,我遇到了一个奇怪的现象。除日期时间值之外的所有内容都被截断!
查看示例:
我正在提取DATETIME列:
select yti.year, yti.techindex, avg(lcoe.lcoe)
from (select distinct year, techindex from lcoe) yti
lcoe
on yti.year = lcoe.year and yti.techindex = lcoe.techindex
group by yti.year, yti.techindex;
这让我得到以下结果:
library(RSQLite)
src_path <- "../DataLocked/Study.db"
con <- dbConnect(SQLite(), src_path)
dbGetQuery(con, "SELECT Todesdatum FROM Kontraindikation LIMIT 10")
现在我从同一个表中省略了NON NULL值:
Todesdatum
1 NA
2 NA
3 2004
4 NA
5 2006
6 NA
7 NA
8 NA
9 NA
10 NA
这让我得到以下结果:
dbGetQuery(con, "SELECT Todesdatum FROM Kontraindikation WHERE Todesdatum NOTNULL")
现在我尝试在DATETIME字段上执行字符串格式:
Todesdatum
1 2004-09-16 00:00:00
2 2006-04-20 00:00:00
3 2006-06-02 00:00:00
4 2007-09-15 00:00:00
5 2008-06-12 00:00:00
6 2005-10-04 00:00:00
7 2008-11-22 00:00:00
8 2005-12-22 00:00:00
9 2006-11-05 00:00:00
10 2006-02-08 00:00:00
...
有效:
dbGetQuery(con, "SELECT strftime('%Y-%m-%d',Todesdatum) as fixed_Todesdatum FROM Kontraindikation 10")
我真的不知道发生了什么以及如何解决这个问题。 我会非常感谢任何指针。
问候, 亚历
答案 0 :(得分:0)
当涉及到数据类型的检测时,当前RSQLite
有点弱。与大多数DBMS不同,SQLite可以存储arbitrary data types in each entry of a column。
您没有提交可重复的示例,但我能够复制问题:
library(tibble)
library(DBI)
a <- tibble(a = c(NA_integer_), b = 1)
b <- tibble(a = c("2014-06-04 00:00:00"), b = 2)
con <- dbConnect(RSQLite::SQLite(), ":memory:")
dbWriteTable(con, "test", a)
dbWriteTable(con, "test", b, append = TRUE)
dbReadTable(con, "test")
a
列的两个数据框具有不同的数据类型,通过编写a
首先将此列创建为INTEGER
。如果我将NA_integer_
更改为NA_character
,问题就会消失。你能复制一下吗?
可能是您的Todesdatum
列具有INTEGER
或REAL
亲和力,这使得RSQLite
相信第一个值是一个数字。更新列关联关系,或使用所需格式的strftime
解决方法。
无论如何,我同意RSQLite应该在这里做得更好。