Разница в месяце с функцией 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.

Два возможных решения:

  1. Удалить library(lubridate) от вашего преамбулы и обратитесь к lubridate пакеты с префиксом lubridate::, Например: lubridate::ymd_hms
  2. Используйте те части команды mutate, которые вы хотите использовать в собственном SQL. Это должно помочь переводу SQL отличить их от строчных переменных, имеющих другое значение. Например: db_df %>% mutate(diff_month = TIMESTAMPDIFF(MONTH, column_date_1, column_date_2))
Другие вопросы по тегам