使用dplyr/dbplyr标准动词访问数据库sysdate的方法咨询
dbplyr访问数据库sysdate的实现方法
你遇到的报错原因是select(sysdate)会将sysdate识别为表的实体字段进行检索,但sysdate是Vertica的内置时间函数,不属于dual表的字段,所以触发字段不存在的报错。你可以通过sql()函数注入原生函数表达式,配合dbplyr标准操作动词实现需求,不需要手写完整SQL。
实现查询sysdate的需求
对应你要的select sysdate from dual效果,代码如下:
library(dbplyr) library(dplyr) dual_tbl <- tbl(con, "dual") dual_tbl %>% mutate(sysdate = sql("sysdate")) %>% select(sysdate)
执行上述代码即可正常返回数据库的当前时间,sql()函数包裹的内容会原封不动传递给数据库解析,不会被识别为表字段。
时间比较过滤的实际场景实现
如果你需要用sysdate和业务表的时间字段做比较,直接在filter中调用即可,比如过滤业务表orders中最近30天的订单数据:
orders_tbl <- tbl(con, "orders") # 过滤创建时间在30天内的订单 recent_orders <- orders_tbl %>% filter(create_time >= sql("sysdate - 30"))
你可以通过show_query()方法验证生成的SQL是否符合预期:
recent_orders %>% show_query()
输出的SQL会和原生写法一致,无需额外拼接SQL语句。
注:
sql()中填写的表达式需要符合你所使用的Vertica数据库的语法规范,如果需要取截断到当日的零点,可以直接写为sql("TRUNC(sysdate)")即可。
内容的提问来源于stack exchange,提问作者mpettis
相关产品推荐
相关产品推荐

