Передать переменную R в SqlQuery RODBC?[дубликат]
Вопрос
На этот вопрос уже есть ответ здесь:
Есть ли какой-либо способ передать переменную, определенную в R, функции SqlQuery в пакете RODBC?
В частности, мне нужно передать такую переменную либо скалярной / табличной функции, либо хранимой процедуре и / или, возможно, предложению WHERE оператора SELECT.
Например, пусть:
x <- 1 ## user-defined
Тогда,
example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")
Или...
example2 <- sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = x")
Или...
example3 <- sqlQuery(myDB,"EXEC dbo.my_stored_proc (x)")
Очевидно, что ничего из этого не работает, но я думаю, что есть что-то, что обеспечивает подобную функциональность.
Решение
Создайте строку, которую вы собираетесь передать.Так что вместо
example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")
делай
example <- sqlQuery(myDB, paste("SELECT * FROM dbo.my_table_fn (",
x, ")", sep=""))
который будет заполнять значение x
.
Другие советы
Если вы используете sprintf, вы можете очень легко создать строку запроса, используя подстановку переменных.Для дополнительной простоты использования, если вы предварительно проанализируете эту строку запроса (я использую stringr), вы можете записать ее в несколько строк своего кода.
например ,
q1 <- sprintf("
SELECT basketid, count(%s)
FROM %s
GROUP BY basketid
"
,item_barcode
,dbo.sales
)
q1 <- str_replace_all(str_replace_all(q1,"\n",""),"\\s+"," ")
df <- sqlQuery(shopping_database, q1)
Отдельное замечание и наконечник шляпы другому R-парню
Недавно я обнаружил, что хочу сделать замену переменных еще проще, используя что-то вроде функции string.format() Python, которая позволяет повторно использовать и изменять порядок переменных внутри строки
например ,
$: w = "He{0}{0}{1} W{1}r{0}d".format("l","o")
$: print(w)
"Hello World"
Однако, похоже, что эта функция не существует в R, поэтому я поспрашивал в Twitter, и один очень полезный человек @kevin_ushey ответил своим собственным пользовательская функция для использования в R.Зацените это!
попробуйте с этим
x <- 1
example2 <- fn$sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = '$x'")
С большим количеством переменных сделайте это:
aaa <- "
SELECT ColOne, ColTwo
FROM TheTable
WHERE HpId = AAAA and
VariableId = BBBB and
convert (date,date ) < 'CCCC'
"
--------------------------
aaa <- gsub ("AAAA", toString(111),aaa)
aaa <- gsub ("BBBB", toString(2222),aaa)
aaa <- gsub ("CCCC", toString (2016-01-01) ,aaa)