2017-11-19 5 views
0

SQL 쿼리의 인수로 날짜를 전달하는 방법 :R -이 다음 쿼리 시도

studentcal3 <- function(x,y) 
{ 
i<- x 
print(i) 
j <- y 
print(j) 
demo1 <-sqldf("SELECT a.StudentName, (b.marks/a.marks) as difference from 
(select Date, StudentName, marks from studenthistorydemo WHERE Date= i) as a 
INNER JOIN (select Date, StudentName, marks from studenthistorydemo where 
Date= j) as b on a.marks= i and b.marks= j WHERE a.marks = i and b.marks = 
j and a.StudentName=b.StudentName") 
} 

을 그리고 다음 함수를 호출

studentcal3('2014-01-01','2014-01-02') 

오류 : - rsqlite_send_query 오류 (CONN @ ptr, 명세서) : 해당 열 없음 :

해결 방법? P.S - 신입니다. R

+0

bquote 함수를보세요 –

답변

0

엔진은 외부 변수 인 부분을 어떻게 알 수 있습니까? 문자열 연결 (Read about paste())을 사용해야합니다. 변수를 작은 따옴표 나 문화 및 언어와 무관 한 형식으로 전달해야한다는 점에 유의하십시오.

studentcal3 <- function(x,y) 
    { 
    i<- x 
    print(i) 
    j <- y 
    print(j) 
    cmd <-paste("SELECT a.StudentName, (b.marks/a.marks) as difference from ", 
        "(select Date, StudentName, marks from studenthistorydemo WHERE Date='",i,"') as a ", 
        "INNER JOIN (select Date, StudentName, marks from studenthistorydemo where ", 
        "Date='",j,"') as b on a.marks='",i,"' and b.marks='",j, 
        "' WHERE a.marks ='",i,"' and b.marks ='",j,"' and a.StudentName=b.StudentName",sep="") 
    #demo1 <-sqldf(cmd) 
    print(cmd) 
    } 
    studentcal3('2014-01-01','2014-01-02') 

결과

"SELECT a.StudentName, (b.marks/a.marks) as difference from (select Date, StudentName, marks from studenthistorydemo WHERE Date='2014-01-01') as a INNER JOIN (select Date, StudentName, marks from studenthistorydemo where Date='2014-01-02') as b on a.marks='2014-01-01' and b.marks='2014-01-02' WHERE a.marks ='2014-01-01' and b.marks ='2014-01-02' and a.StudentName=b.StudentName"

및 SQL 주입에주의! 주입 공격을 피하기 위해 실제 매개 변수가있는 문장을 작성할 수 있습니다.

이 진술이 실제로 당신이 기대하는 것을 전달하는 것이 다른 질문입니다. 당신이 그것을 밖으로 인쇄하여 그것을 쿼리 창에 붙여 넣을 수도 있습니다 ...

+0

시간 주셔서 감사합니다 @ Shnugo. 그것은 효과가 없었습니다. 귀하가 언급 한 질의를 어떻게 진행하는지에 대해 조명을 보여 주거나 공유 할 수 있습니까? – BTG123

+0

@ BTG123이 질문은 sql 명령 *에 인수를 전달하는 방법에 관한 것입니다. **이 질문은 ** 해결 되었습니까? 이것을 문장의 사본으로 확인하고 데이터베이스에 대해 직접 실행하십시오 (RDBMS? 태그를 적절하게 쓰십시오,'[sql]'는 충분하지 않습니다!). 해결되면이 질문을 닫고 (투표 카운터 아래에있는 수락 확인) 새 질문을 시작하십시오. StackOverflow에서 우리는 원칙 * 하나의 문제 - 하나의 질문 *을 따른다. ... – Shnugo

+0

Thnaks @ Shnugo. 나는 그것을 염두에 두겠다. 당신은 큰 도움이되었습니다!. 건배. – BTG123