2013-02-22 124 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')') 

我通常得到這個錯誤消息:

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

日期過濾器後,我具有由OR彼此分開幾個其他過濾器(排除在示例)。

+2

嘗試轉義您的查詢字符串中的引號。用'\'替換''''。 – 2013-02-22 09:50:09

回答

1

最好使用粘貼來構建你的sql查詢,特別是在處理日期時。在這裏我將日期轉換爲numeric,但它是可選的(它取決於數據庫,我認爲MS SQL將字符自動轉換爲日期)。我創建使用粘貼和SEP = '\ 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:

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