odbcdriverconnect - r sql database
¿Pasa la variable R a sqlQuery de RODBC? (4)
Esta pregunta ya tiene una respuesta aquí:
¿Hay alguna forma de pasar una variable definida dentro de R a la función sqlQuery dentro del paquete RODBC?
Específicamente, necesito pasar tal variable a una función escalar / con valores de tabla, a un procedimiento almacenado y / o quizás a la cláusula WHERE de una instrucción SELECT.
Por ejemplo, deja:
x <- 1 ## user-defined
Entonces,
example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")
O...
example2 <- sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = x")
O...
example3 <- sqlQuery(myDB,"EXEC dbo.my_stored_proc (x)")
Obviamente, ninguno de estos trabajos, pero estoy pensando que hay algo que permite este tipo de funcionalidad.
Construye la cuerda que intentas pasar. Entonces, en lugar de
example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")
hacer
example <- sqlQuery(myDB, paste("SELECT * FROM dbo.my_table_fn (",
x, ")", sep=""))
que completará el valor de x
.
Si usa sprintf, puede construir fácilmente la cadena de consulta utilizando la sustitución de variable. Para una mayor facilidad de uso, si pre-analiza esa cadena de consulta (estoy usando stringr) puede escribirla en múltiples líneas en su código.
p.ej
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)
Nota al margen y punta de sombrero a otro R chap
Recientemente descubrí que quería hacer la sustitución de variables aún más simple mediante el uso de la función string.format () de Python, que permite reutilizar y reordenar variables dentro de la cadena.
p.ej
$: w = "He{0}{0}{1} W{1}r{0}d".format("l","o")
$: print(w)
"Hello World"
Sin embargo, esta función no parece existir en R, así que pregunté por Twitter, y un muy útil @kevin_ushey respondió con su propia función personalizada para ser utilizada en R. ¡Compruébalo!
Con más variables haz esto:
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)
prueba con esto
x <- 1
example2 <- fn$sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = ''$x''")