我是R和mySQL的新手,想在R
中运行以下mysql命令query = "select x, y from table where z in ('a', 'b');"
sqlQuery(connection, query)
假设我有一个很长的可变长度向量。是否可以
vector = c('a','b', .....)
query = "select x, y from table where z in **vector**;"
我试过
query = paste("select x, y from table where z in (", paste(vector, collapse =', '), ");")
但我在括号中丢失了引号,我得到了
query = "select x, y from table where z in (a, b);"
不能在sqlQuery中运行。有没有办法使用粘贴命令,以便我得到一串字符串?或者有更好的方法来完成我想要完成的任务吗?
答案 0 :(得分:9)
您需要使用shQuote
query <- paste("select x, y from table where z in (", paste(shQuote(vector, type = "sh"),
collapse = ', '), ");")
query
[1] "select x, y from table where z in ( 'a', 'b', 'c', 'd' );"
答案 1 :(得分:1)
您可以将'
括起来"
,使其真正成为字符串的一部分:
vector = c("'a'","'b'", .....)
一个例子:
> vec = c("'a'", "'b'", "'c'")
> paste(vec, collapse = ', ')
[1] "'a', 'b', 'c'"
答案 2 :(得分:1)
将您的矢量放入引号中,然后将其粘贴到查询中。
vector <- paste0("'", vector, "'", collapse=", ")
query <- paste("select ....", vector, <etc>)
shQuote
为你做这件事,但这是滥用其目的。它用于引用 OS shell 的字符串,并且无法保证其默认选择将是您的数据库所期望的。例如,在Windows上,它用双引号包装所有内容,这是cmd.exe
所期望的,但可能会破坏查询字符串。