#mysql #r #datetime
#mysql #r #дата и время
Вопрос:
Я пытаюсь вставить динамическую переменную в sql-запрос в R, чтобы запрос увеличивался в 24 раза в течение 24-часового периода и записывал каждый результирующий набор в csv. К сожалению, я получаю эту ошибку:
Error in mysqlExecStatement(conn, statement, ...) :
RS-DBI driver: (could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set @d2 = 2014-06-01 01:00:00 ;
Я попытался принудительно ввести свою дату / время, используя as.character, думая, что моя переменная даты / времени будет передана как «xx-xx-xxxx xx: xx: xx», но, к сожалению, каждый раз, когда я запускаю функцию, она отбрасывает кавычки и выдает запрос с ошибками. Есть ли какой-либо способ передать объект в sql-запрос в R, который можно рассматривать как дату / время в MySQL?
Соответствующий код выглядит следующим образом:
timeseq <- timeSequence(from = "2014-06-01", to ="2014-06-02", by = "hour")
for (i in 1:length(timeseq)){
if(i<length(timeseq)){
i2 <- i 1
}
date1 <- timeseq[i,]
date2 <- timeseq[i2,]
date1 <- as.character(date1)
date2 <- as.character(date2)
sqlcmd <- paste("set @d1 = ", date1, ";
set @d2 = ",date2,";
select
...")
test <- dbGetQuery(MySQLcon, sqlcmd)
Комментарии:
1. Я думаю, вам нужно добавить метки sigle (‘…’) вокруг дат?
2. Когда я это делаю, SQL считывает его просто как date1 и date2.
Ответ №1:
Я понял это самостоятельно, но начал с совета Конваса. Установка одиночных галочек сама по себе не работает, потому что R просто считывает имя моей переменной как строку в запросе. Вместо этого мне пришлось ввести «‘»date1″‘», чтобы заставить его работать.
Мне также пришлось полностью удалить мои определенные переменные в верхней части моего заявления, у R ничего этого не было. К счастью, это простой запрос, и мне действительно не нужны определенные переменные. Мой окончательный код выглядит следующим образом:
timeseq <- timeSequence(from = "2014-06-01", to ="2014-06-02", by = "hour")
for (i in 1:length(timeseq)){
if(i<length(timeseq)){
i2 <- i 1
}
date1 <- timeseq[i,]
date2 <- timeseq[i2,]
date1 <- as.character(date1)
date2 <- as.character(date2)
sqlcmd <- paste("
select
round(gps_data.latitude,2) latitude,
round(gps_data.longitude,2) longitude,
count(gps_data.id) n
from
gps_data,
pims,
fleets
where
fleets.id = pims.fleet_id and
fleets.id = 3 and
gps_data.pim_id = pims.id and
gps_data.created_at between '",date1,"'and '",date2,"'
group by 1,2")
test <- dbGetQuery(MySQLcon, sqlcmd)
write.csv(filename=date1,x=date1)