Domanda

    

Questa domanda ha già una risposta qui:

         

C'è un modo per passare una variabile definita all'interno R al sqlquery all'interno del pacchetto RODBC?

In particolare, ho bisogno di passare un tale variabile, o un / funzione con valori di tabella scalare, una stored procedure, e / o forse la clausola WHERE di un'istruzione SELECT.

Ad esempio, lasciare che:

x <- 1 ## user-defined

Poi,

example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")

Oppure ...

example2 <- sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = x")

Oppure ...

example3 <- sqlQuery(myDB,"EXEC dbo.my_stored_proc (x)")

Ovviamente, nessuno di questi lavori, ma sto pensando che c'è qualcosa che consente questo tipo di funzionalità.

È stato utile?

Soluzione

Crea la stringa che si intende passare. Così, invece di

example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")

do

example <- sqlQuery(myDB, paste("SELECT * FROM dbo.my_table_fn (", 
                                x, ")", sep=""))

che compilare il valore della x.

Altri suggerimenti

Se si usa sprintf, si può facilmente costruire la stringa di query utilizzando la sostituzione di variabile. Per facilità d'uso-extra, se si pre-parse che query string (sto usando stringr) si può scrivere su più righe nel codice.

per es.

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)

Side-nota e cappello-punta ad un altro R cap

Di recente ho scoperto che volevo fare la sostituzione di variabile ancora più semplice utilizzando qualcosa di simile function () String.Format di Python, che consente di riutilizzare e le variabili di riordino all'interno della stringa

per es.

$: w = "He{0}{0}{1} W{1}r{0}d".format("l","o")
$: print(w)
"Hello World"

Tuttavia, questa funzione non sembra esistere in R, così ho chiesto in giro su Twitter, e un tipo molto utile @kevin_ushey rispose con la sua funzione personalizzata da utilizzare in R. Controllare esso fuori!

prova con questo

x <- 1
example2 <- fn$sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = '$x'")

Con più variabili fare questo:

  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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top