我正在使用dbplyr查询MSSQL数据库,并经常使用mutate(YM = DATEFROMPARTS(YEAR(Date), MONTH(Date), 1))
将日期舍入到每月的第一天。我希望能够创建一个R函数来简化此过程,例如输入mutate(YM = round_month(Date))
并让dbplyr将其转换为上面的DATEFROMPARTS
函数。
似乎我可以使用dbplyr中的sql_expr()
函数来做到这一点。通读包的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
显然什么都不做。我在做什么错了?
答案 0 :(得分:1)
尝试一下:
mytbl %>%
mutate(YM = !!round_month("Date")) %>%
show_query()
基于以下响应: https://community.rstudio.com/t/how-to-subtract-dates-using-dbplyr/22135/5