Разница в месяце с функцией mysql TIMESTAMPDIFF в dbplyr R
Я пытаюсь вычислить разницу в месяцах между двумя датами в R, используя пакет dbplyr, я хочу отправить запрос sql, чтобы вычислить его, используя встроенную функцию "timestampdiff" в mysql, но я получаю ошибку:
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("escape"): нет применимого метода для "escape", примененного к объекту класса "function"
И если написано так:
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?
1 ответ
month
это функция в lubridate
пакет. Похоже, что мутирует month
как функция R month()
а не как текст.
Если вы используете собственный SQL для вычисления разницы во времени, вам не нужен пакет lubridate.
Два возможных решения:
- Удалить
library(lubridate)
от вашего преамбулы и обратитесь кlubridate
пакеты с префиксомlubridate::
, Например:lubridate::ymd_hms
- Используйте те части команды mutate, которые вы хотите использовать в собственном SQL. Это должно помочь переводу SQL отличить их от строчных переменных, имеющих другое значение. Например:
db_df %>% mutate(diff_month = TIMESTAMPDIFF(MONTH, column_date_1, column_date_2))