如何在dbplyr中使用R代码创建自定义SQL函数?

Aar*_*ley 5 sql-server r dbplyr

我正在使用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))
Run Code Online (Sandbox Code Playgroud)

参见: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()
Run Code Online (Sandbox Code Playgroud)

我希望得到这个:

<SQL>
SELECT DATEFROMPARTS(YEAR("Date"), MONTH("Date"), 1) AS YM
FROM mytbl
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个:

<SQL>
SELECT round_month("Date") AS YM
FROM mytbl
Run Code Online (Sandbox Code Playgroud)

显然什么也没做。我究竟做错了什么?

Dav*_*otz 1

试试这个:

mytbl %>%
  mutate(YM = !!round_month("Date")) %>%
  show_query()
Run Code Online (Sandbox Code Playgroud)

基于此回复: https://community.rstudio.com/t/how-to-subtract-dates-using-dbplyr/22135/5