R dbplyr连接SQL Server时日期过滤查询失败问题排查
解决dbplyr查询SQL Server整数日期字段时的类型不匹配问题
这问题我之前也碰到过!核心原因是R里的数值类型在dbplyr转SQL时的小坑——你写的20200618在R里默认是双精度浮点数,不是整数,所以dbplyr生成的SQL就变成了20200618.0,而你表中的key_date_trade是整数类型,SQL Server对类型匹配很严格,这就导致查询报错了。
下面给你几种靠谱的解决方式,按需选择:
最直接的修复:显式转为整数
把过滤值用as.integer()包装一下,告诉dbplyr这是整数类型,生成的SQL就会用整数匹配:data <- fact_transaction_line %>% filter(key_date_trade == as.integer(20200618))强制用SQL原生整数:用
sql()函数
如果想完全控制SQL里的写法,可以直接用sql()函数传入整数字符串,避免R的类型转换干扰:data <- fact_transaction_line %>% filter(key_date_trade == sql("20200618"))更优的长期方案:转成日期类型处理
既然这个字段是日期含义,不如把它转成R的日期类型来操作,可读性和灵活性都更强:data <- fact_transaction_line %>% # 把整数日期转成R的Date类型 mutate(trade_date = as.Date(as.character(key_date_trade), format = "%Y%m%d")) %>% # 用标准日期格式过滤 filter(trade_date == as.Date("2020-06-18"))这种方式还支持范围查询,比如
filter(trade_date >= as.Date("2020-06-01") & trade_date <= as.Date("2020-06-30")),比直接用整数过滤直观多了。
内容的提问来源于stack exchange,提问作者Erik Rasmussen
相关产品推荐
相关产品推荐

