首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将范畴向量存储在引号中时的RSQLite查询

将范畴向量存储在引号中时的RSQLite查询
EN

Stack Overflow用户
提问于 2017-05-12 21:22:37
回答 1查看 149关注 0票数 0

我有一个SQLite数据库,我使用RSQLite包对其进行查询。我有一个分类向量,我想对查询进行过滤,使我的查询看起来如下所示:

代码语言:javascript
运行
复制
dbGetQuery(mydb, 
           'select PLT_CN, INVYR 
            from GRM 
            where ESTN_TYPE = "AL"')

这通常可以正常工作,并返回ESTN_TYPE级别为AL的所有数据。

不过。

它不会这么做的。这是因为在存储数据的.csv文件中,AL值实际上是作为"AL"输入的。因此,当我查询AL时,我的查询将返回零数据。我怎么才能解决这个问题?

(感谢@Parfait让我意识到这是我在前一个问题中的真正问题)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-12 22:30:03

RSQLite

代码语言:javascript
运行
复制
library(DBI)
con <- dbConnect(RSQLite::SQLite(), ":memory:")
df <- data.frame(a=1:5, b=sprintf('"%s"', letters[1:5]), stringsAsFactors=F)
df
#   a   b
# 1 1 "a"
# 2 2 "b"
# 3 3 "c"
# 4 4 "d"
# 5 5 "e"
dbWriteTable(con, "tbl", df)
# [1] TRUE
dbGetQuery(con, 'select * from tbl')
#   a   b
# 1 1 "a"
# 2 2 "b"
# 3 3 "c"
# 4 4 "d"
# 5 5 "e"
dbGetQuery(con, 'select * from tbl where b="a"')
# [1] a b
# <0 rows> (or 0-length row.names)

无论如何,使用参数化查询通常是一件好事,所以可以说是一箭双雕:

代码语言:javascript
运行
复制
dbGetQuery(con, 'select * from tbl where b=:x', params=list(x='"a"'))
#   a   b
# 1 1 "a"
dbGetQuery(con, 'select * from tbl where b in (:x)', params=list(x=c('"a"','"c"')))
#   a   b
# 1 1 "a"
# 2 3 "c"

RMySQL

(我手头上没有mysql的实例,所以这只是猜测。)

使用@x而不是:x

代码语言:javascript
运行
复制
dbGetQuery(con, 'select * from tbl where b=@x', params=list(x='"a"'))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43946669

复制
相关文章

相似问题

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