2013-02-22 162 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