我目前正在使用以下内容使用dbplyr提取数据集:
connectInfo <- dbConnect(
odbc(),
Driver = "SQL Server",
Server = "myServerName",
Database = "myDatabaseName",
Trusted_Connection = "True"
)
tbl(connectInfo, "tableName") %>%
summarise(
nbDate = LEFT(nbDate, 5),
book,
rateFeeChg
) %>%
mutate(
rateFeeChg = rateFeeChg * 100
)
使用以下输出:
nbDate book rateFeeChg
<chr> <chr> <dbl>
1 38348 Classic 0.0000000
2 38744 Classic 2.1270990
3 39640 Classic 2.8999999
4 40423 Classic 0.0000000
# ... with more rows
我想要做的是将这5位数日期值转换为mutate函数内的常规日期值。 我知道通过使用janitor库我可以很容易地转换它,但是当我尝试放置
时mutate(
rateFeeChg = rateFeeChg * 100,
nbDate = janitor::excel_numeric_to_date(nbDate)
)
我收到以下错误:
Error in janitor::excel_numeric_to_date(nbDate) :
object 'nbDate' not found
答案 0 :(得分:0)
最主要的是,在MS SQL中,此转换首先需要转换为datetime
,然后才转换为date
。由于在dbplyr
中目前没有强制转换为datetime
的函数,因此最好的方法是使用sql()
传递MS SQL命令。这样,您可以保留所有流程服务器端,并避免将数据collect()
存入R内存。 SQL中的默认datetime
转换似乎与Excel具有相同的基准日期,因此您应该获得相同的日期。这是我刚刚在系统上测试过的建议解决方案:
tbl(connectInfo, "tableName") %>%
summarise(
nbDate = sql("CAST(LEFT(nbDate, 5) as datetime)"),
book,
rateFeeChg
) %>%
mutate(
nbDate = as.Date(nbDate),
rateFeeChg = rateFeeChg * 100
)