2013-07-10 39 views
4

的字符串我新的兩個R和MySQL,並希望作爲Rř載體導入字符串

query = "select x, y from table where z in ('a', 'b');" 
sqlQuery(connection, query) 

運行以下MySQL命令假設我有一個很長的可變長度的向量。是否有可能做

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運行。有沒有辦法使用粘貼命令,以便我得到一串字符串?還是有更好的方法去做我想完成的事情?

回答

8

您需要使用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');" 
+0

這是一個更好的解決方案,+1! –

+0

@PaulHiemstra謝謝 – dickoa

+0

這是依賴於操作系統的。例如,在Windows下,你會得到一些不同的東西。 –

1

您可以環繞'通過",使他們字符串的真正部分:

vector = c("'a'","'b'", .....) 

一個例子:

> vec = c("'a'", "'b'", "'c'") 
> paste(vec, collapse = ', ') 
[1] "'a', 'b', 'c'" 
1

認沽你的矢量在粘貼到你的引用之前查詢。

vector <- paste0("'", vector, "'", collapse=", ") 

query <- paste("select ....", vector, <etc>) 

shQuote爲您完成此,但這是它的目的的濫用。它的意思是爲操作系統shell引用字符串,並且不能保證它的默認選擇是數據庫所期望的。例如,在Windows上,它將所有內容都包含在雙引號中,這是cmd.exe所期望的,但可能會破壞查詢字符串。