我想使用sqldf在R中进行循环查询,以选择日期为“11/12/2015”且在上午9点的所有非NULL X.1变量。示例:
StartDate X.1
11/12/2015 09:14 A
11/12/2015 09:36
11/12/2015 09:54 A
日期是从其他查询生成的变量
nullob<-0
dayminnull<-as.numeric(sqldf("SELECT substr(Min(StartDate),1,03)as hari from testes")) # this produce "11/12/2015"
for (i in 1 : 12){
dday<-mdy(dayminnull)+days(i) #go to next day
sqlsql <- sprintf("SELECT count([X.1]) FROM testes where StartDate like '% \%s 09: %'", dday)
x[i]<-sqldf(sqlsql)
nullob<-nullob+x[i]
}
它带有错误:sprintf出错(“SELECT count([X.1])FROM testes WHERE StartDate''%% s 09%'”,: 无法识别的格式规范'%' 请你好。提前谢谢你
答案 0 :(得分:4)
文档中没有 super 清除,但是%
后跟%
,即%%
,是告诉{{1}的方法使用文字sprintf
。我们可以相当容易地测试这个:
%
对于您的查询字符串,这应该有效:
sprintf("%% %s %%", "hi")
[1] "% hi %"
来自sprintf("SELECT count([X.1]) FROM testes where StartDate like '%% %s 09: %%'", dday)
:
字符串fmt包含传递给的普通字符 输出字符串,以及操作的转换规范 通过
?sprintf
提供的论据。允许的转换 规范以...
开头,以其中一个字母结尾 设置%
。这些字母表示以下类型:... [
上的文档aAdifeEgGosxX%
]
aAdifeEgGosxX
:文字%
(在这种情况下,不允许使用下面给出的额外格式字符)。