我一直在尝试通过 RODBC 设置对 MS SQL 数据库的查询。不幸的是我无法设置适当的日期过滤器。我尝试在引号和单引号、DATE 函数、括号中输入日期,但它不起作用。
这是代码:
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 分隔(从示例中排除)。
最佳答案
最好使用粘贴来构建 SQL 查询,特别是在处理日期时。这里我将日期转换为数字
,但它是可选的(这取决于数据库,我认为MS SQL会自动将字符转换为日期)。我使用 Paste 和 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(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
关于sql - Rodbc 日期过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15020299/