2013-02-22 5 views
1

RODBC를 통해 MS SQL 데이터베이스에 쿼리를 설정하려고했습니다. 불행히도 적절한 날짜 필터를 설정할 수 없습니다. 따옴표와 작은 따옴표, 날짜 함수, 대괄호로 날짜를 입력 해 보았습니다. 제대로 작동하지 않습니다.rodbc 날짜 필터

dbquery <- sqlQuery(dbhandle, 'SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 
    FROM deh_10.dbo.ST031000 ST031000 
    WHERE (ST03015>'2013-01-01')') 

내가 일반적으로이 오류 메시지가 얻을 : 여기

코드입니다 내가 OR에 의해 서로 분리 된 여러 가지 다른 필터가 날짜 필터 후

"dbquery <- sqlQuery(dbhandle, 'SELECT ST03001, ST03003, ST03007, ST03015, ST03012, 
    ST03020, ST03021, ST03022 FROM deh_10.dbo.ST031000 ST031000 WHERE 
    (ST03015>DATE('2013" 

을 (이 예에서 제외).

+2

이 당신의 쿼리 문자열 안에 따옴표를 탈출 시도 나는 일부 데이터를 생성합니다. ''를'\ ''로 대체하십시오. –

답변

1

특별히 날짜를 처리 할 때 붙여 넣기를 사용하여 SQL 쿼리를 구성하는 것이 좋습니다. 여기에 날짜를 numeric으로 변환하지만 선택적입니다 (데이터베이스에 따라 달라 지므로 MS SQL이 자동으로 날짜로 변환됩니다). 예를 들어

: 나는 붙여 넣기 및 9월 = '\ n을'을 사용하여 내 쿼리를 만들

다음
query <- paste(
    'SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 ', 
    'FROM ST031000', 
    paste("WHERE ST03015 >" , as.numeric(as.Date('2013-05-01')),sep=''), 
    sep='\n') 

고양이가 사용 :

cat(query) 
SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 
FROM ST031000 
WHERE ST03015 >15826 

또한 변환이 (필요 할 수 없다 숫자)

query <- paste(
+ 'SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 ', 
+ 'FROM ST031000', 
+ paste("WHERE ST03015 >'" , as.Date('2013-05-01'),"'",sep=''), 
+ sep='\n') 

> cat(query) 
SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 
FROM ST031000 
WHERE ST03015 >'2013-05-01' 

여기서는 sqldf 패키지를 사용한 예입니다. 그런 다음

values <- as.data.frame(matrix(sample(1:100,8*6*3,rep=T),ncol=8)) 
colnames(values) <- c('ST03001', 'ST03003', 'ST03007', 'ST03015', 'ST03012', 'ST03020', 'ST03021', 'ST03022') 
values$ST03015 = seq(as.Date("2012/1/1"), as.Date("2013/06/1"), length.out= nrow(values)) 

:

sqldf(query <- paste(
    'SELECT ST03001, ST03003, ST03007, ST03015, ST03012, ST03020, ST03021, ST03022 ', 
    'FROM ST031000', 
    paste("WHERE ST03015 >" , as.numeric(as.Date('2013-05-01')),sep=''), 
    sep='\n')) 

    ST03001 ST03003 ST03007 ST03015 ST03012 ST03020 ST03021 ST03022 
1  73  74  58 2013-05-01  82  85  88  58 
2  8  63  71 2013-06-01  37  76  15  44