mysql - R - 使用 ""将日期/时间变量推送到 SQL 查询中

标签 mysql r datetime

我正在尝试将动态变量插入 R 中的 SQL 查询中,以便查询在 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”传递,但不幸的是,每次我运行该函数时,它都会删除引号和错误查询。有没有某种方法可以将对象传递到 R 中的 sql 查询中,该对象可以被视为 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)

最佳答案

我自己想出了这个办法,但首先是引用了 Konvas 的建议。单独放置单个刻度线是行不通的,因为 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)

关于mysql - R - 使用 ""将日期/时间变量推送到 SQL 查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24492384/

相关文章:

java - 一年中两个日期之间的间隔时间

来自mysql的Php多维数组

mysql - 忽略旧 last_updated 记录时的插入

php - 带有php if block 的多行Mysql插入语句

R float 精度在从字符转换时丢失

php - 插入 0000-00-00 00 :00:00 to DateTime in Mysql Database

python - 从数据库中获取多个值

R包cmd检查-无法识别非ascii字符

r - 如何根据条件消除匹配模式

ruby-on-rails - 我怎样才能以 ruby 开始当前的工作日?