问题
I would like to do a looping query in R using sqldf to that select all non-NULL X.1 variable with date "11/12/2015" and at 9AM. Example :
StartDate X.1
11/12/2015 09:14 A
11/12/2015 09:36
11/12/2015 09:54 A
The date is in variable that generated from other query
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]
}
And it comes with error : Error in sprintf("SELECT count([X.1]) FROM testes WHERE StartDate like '%%s 09%'", : unrecognised format specification '%' Please hellp. thank you in advance
回答1:
It's not super clear in the documentation, but a %
followed by a %
, that is %%
, is the way to tell sprintf
to use a literal %
. We can test this fairly easily:
sprintf("%% %s %%", "hi")
[1] "% hi %"
For your query string, this should work:
sprintf("SELECT count([X.1]) FROM testes where StartDate like '%% %s 09: %%'", dday)
From ?sprintf
:
The string fmt contains normal characters, which are passed through to the output string, and also conversion specifications which operate on the arguments provided through
...
. The allowed conversion specifications start with a%
and end with one of the letters in the setaAdifeEgGosxX%
. These letters denote the following types:... [Documentation on
aAdifeEgGosxX
]
%
: Literal%
(none of the extra formatting characters given below are permitted in this case).
来源:https://stackoverflow.com/questions/36881669/r-sprintf-in-sqldfs-like