Заменить «в» в R для SQL-запроса - PullRequest
1 голос
/ 10 октября 2019

Я работаю над приложением RShiny, и вход, поступающий в RMD из приложения, представляет собой массив «Выборов» в зависимости от того, что выберет пользователь. Выходные данные массива:

[1] "One" "Two" "Three"

Я хочу подключить варианты к SQL-запросу в RMD в виде:

('One', 'Two', 'Three')

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Я настоятельно рекомендую вам не использовать paste0 из-за возможности внедрения SQL.

Вместо этого вы должны использовать dbplyr::escape, который должным образом экранирует строковые входы (по отношению к бэкенду, подразумеваемому предоставленнымподключение). Например:

dbplyr::escape(x = c("one", "two", "three"), 
           parens = T, 
           collapse = ",", 
           con = con_oracle)

создает строку:

# <SQL> ('one','two','three')
0 голосов
/ 10 октября 2019

Если предположить, что вы вводите:

x <- c("One", "Two", "Three")

, мы можем построить предложение WHERE IN, используя paste с collapse:

sql_where <- paste0("WHERE some_col IN ('", paste(x, collapse="', '"), "')")
sql_where

[1] "WHERE some_col IN ('One', 'Two', 'Three')"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...