我试图使用dbplyr包计算R中两个日期之间的月差,我希望发送sql查询来使用mysql中的"timestampdiff“本机函数计算它,但我得到了一个错误:
library(tidyverse)
library(lubridate)
library(dbplyr)
db_df <- tbl(con, "creditos")
db_df %>% mutate(diff_month = timestampdiff(month, column_date_1, column_date_2))但是参数month没有正确转换,因为它看起来像R中的一个对象或函数:
UseMethod中的错误(“转义”):没有适用于类“函数”对象的“转义”方法
如果这样写的话:
db_df %>% mutate(diff_month = timestampdiff("month", column_date_1, column_date_2))我还会得到一个错误:
您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便将
month、column_date_1、column_date_2使用为diff_month。
我相信这是因为dbplyr正在用双引号将“月份”写到mysql中,而且应该没有双引号,如下所示:
TIMESTAMPDIFF(month, column_date_1, column_date_2) AS `diff_month`或者是否有更好的方法使用dbplyr计算月差?
发布于 2018-09-22 20:00:59
month是lubridate包中的一个函数。看起来,month被传递为R函数month(),而不是文本。
如果使用本机SQL计算时间差,则不需要lubridate包。
有两种可能的解决办法:
library(lubridate),并使用前缀lubridate::引用lubridate包。例如:lubridate::ymd_hmsdb_df %>% mutate(diff_month = TIMESTAMPDIFF(MONTH, column_date_1, column_date_2))https://stackoverflow.com/questions/51310514
复制相似问题