복붙노트

[SQL] SQL 문에서 사용하는 R 스크립트 문자열 변수 전달

SQL

SQL 문에서 사용하는 R 스크립트 문자열 변수 전달

나는 예를 들어 SQL 문을 사용 R 스크립트 문자열 변수를 사용하려고 :

x="PASS"

SQL<- paste("select ID, NAME, STATUS from STUDENT where STATUS =(",x,")",sep="")
Q1 <- dbGetQuery(con, SQL)

이 오류는 말합니다 :

그 말 상태 = ( "X") "= PASS와 추가로이해야 'PASS'인용 '

나는 다음으로 ''하지만 성공을 두지하려고 노력했다.

SQL <- paste("select ID, NAME, STATUS from STUDENT where STATUS ='(",x,")' ",sep="")
Q1 <- dbGetQuery(con, SQL)

나는 번호를 테스트하고 그것은 잘 작동하지만 난이 문자열을 사용하면 값이 따옴표에 있어야하기 때문에 '는'작동하지 않습니다.

해결법

  1. ==============================

    1.사용 대신 sprintf를 :

    사용 대신 sprintf를 :

    x <- "PASS"
    sprintf("select ID, NAME, STATUS from STUDENT where STATUS = '%s'", x)
    
    ## [1] "select ID, NAME, STATUS from STUDENT where STATUS = 'PASS'"
    
  2. ==============================

    2.이 시도:

    이 시도:

    library(gsubfn)
    x <- "PASS"
    
    fn$dbGetQuery(con, "select ID, NAME, STATUS from STUDENT where STATUS = '$x' ")
    

    이것은 또한 작동합니다 :

    s <- fn$identity("select ID, NAME, STATUS from STUDENT where STATUS = '$x' ")
    dbGetQuery(con, s)
    
  3. ==============================

    3.Windows 용 편집

    Windows 용 편집

    시험

    x = "PASS"
    
    SQL<- paste0("select ID, NAME, STATUS from STUDENT where STATUS = ", shQuote(x, 'sh'))
    Q1 <- dbGetQuery(con, SQL)
    

    더 일반적으로 shQuote 같은 구성 일 때 유용합니다 :

    paste0("SELECT * FROM urtable where urvar IN(", paste0(shQuote(LETTERS, 'sh'), collapse = ','), ")")
    [1] "SELECT * FROM urtable where urvar IN('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z')"
    
     #
    

    당신은 단순한 문자열이있는 경우. 더 복잡한 문자 문자열의 다른 어쩌면 필요한 접근한다. 예를 들어 PostgreSQL의 당신은 문자를 탈출 달러 - 인용 문자열 상수를 사용할 수 있습니다.

    당신은 당신이 사용하거나 R 패키지를 연관되는 SQL의 어떤 변형 언급 해달라고. 일부 R 패키지는 RMySQL에서 RPostgreSQL에서 postgresqlEscapeStrings 또는 dbEscapeStrings 같은 도우미 기능을 가질 수있다.

  4. from https://stackoverflow.com/questions/17435086/pass-string-variable-in-r-script-to-use-it-in-sql-statement by cc-by-sa and MIT license