【发布时间】:2019-06-10 16:54:48
【问题描述】:
我正在使用 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
这显然什么也没做。我做错了什么?
【问题讨论】:
标签: r sql-server dbplyr