4

私は 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 では実行されません。文字列の文字列を取得するために貼り付けコマンドを使用する方法はありますか? または、私が達成したいことを行うためのより良い方法はありますか?

4

3 に答える 3

10

使用する必要があります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' );"
于 2013-07-10T05:46:13.457 に答える
1

'byを囲んで、"実際に文字列の一部にすることができます。

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

例:

> vec = c("'a'", "'b'", "'c'")
> paste(vec, collapse = ', ')
[1] "'a', 'b', 'c'"
于 2013-07-10T05:45:08.960 に答える
1

クエリに貼り付ける前に、ベクターを引用符で囲みます。

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

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

shQuoteはこれを行いますが、これはその目的の悪用です。OS shellの文字列を引用するためのものであり、デフォルトの選択がデータベースが期待するものになるという保証はありません。たとえば、Windows ではすべてを二重引用符で囲みます。これはcmd.exe想定どおりですが、クエリ文字列が壊れる可能性があります。

于 2013-07-10T06:02:21.627 に答える