Я использую dbplyr для запроса базы данных MSSQL и часто округляю даты до первого числа месяца, используя mutate(YM = DATEFROMPARTS(YEAR(Date), MONTH(Date), 1))
. Я хотел бы иметь возможность создать функцию R, которая упростит это для меня, например, наберите mutate(YM = round_month(Date))
и попросите dbplyr перевести это на функцию DATEFROMPARTS
выше.
Кажется, я мог бы сделать это, используя функцию sql_expr()
в dbplyr. Читая R-код пакета, кажется, что именно так переводятся R-функции. Например:
year = function(x) sql_expr(DATEPART(YEAR, !!x))
См .: https://github.com/tidyverse/dbplyr/blob/master/R/backend-mssql.R
Итак ... Я пытался сделать то же самое самостоятельно:
round_month <- function(x) sql_expr(DATEFROMPARTS(YEAR(!!x), MONTH(!!x), 1))
mytbl %>%
mutate(YM = round_month(Date)) %>%
show_query()
Я ожидал получить это:
<SQL>
SELECT DATEFROMPARTS(YEAR("Date"), MONTH("Date"), 1) AS YM
FROM mytbl
Но вместо этого я получаю это:
<SQL>
SELECT round_month("Date") AS YM
FROM mytbl
Что, очевидно, ничего не делает. Что я делаю не так?