如何在R中自动获取昨日日期,用于本地文件读取及数据库查询
R脚本自动替换昨日日期实现方案
前置准备:生成昨日多格式日期变量
首先生成不同格式的昨日日期,适配两种场景的调用需求,代码如下:
# 加载必要依赖包 library(lubridate) library(tidyverse) library(DBI) library(dbplyr) # 按需设置业务对应时区,国内场景可设置为东八区,避免日期偏移 Sys.setenv(TZ = "Asia/Shanghai") # 生成昨日基础日期 yesterday <- Sys.Date() - 1 # 适配本地文件名的两种格式 date_dash <- format(yesterday, "%Y-%m-%d") # 输出格式:2021-11-01 date_underscore <- format(yesterday, "%Y_%m_%d") # 输出格式:2021_11_01 # 适配数据库查询的昨日时间戳区间(秒级,覆盖昨日00:00:00到23:59:59) ts_start <- as.integer(as.POSIXct(paste0(yesterday, " 00:00:00"))) ts_end <- as.integer(as.POSIXct(paste0(yesterday, " 23:59:59")))
场景1:本地文件读取自动适配
无需手动修改文件名和变量名,直接用生成的日期变量拼接路径即可,示例代码如下:
# 拼接文件路径 file_path1 <- paste0("C:/Users/Guest 1/Downloads/DWReport_", date_dash, ".csv") file_path2 <- paste0("C:/Users/Guest 1/Downloads/DWReport_", date_dash, " (1).csv") # 读取文件并合并 DWReport <- read_csv(file_path1) DWReport_1 <- read_csv(file_path2) match_report <- rbind(DWReport, DWReport_1) # 可选优化:如果固定有多个带序号的同规则文件,可批量读取合并,代码更简洁 # match_report <- list.files(path = "C:/Users/Guest 1/Downloads/", # pattern = paste0("DWReport_", date_dash, ".*\\.csv"), # full.names = TRUE) %>% # map_dfr(read_csv)
场景2:数据库查询时间戳自动适配
直接将过滤条件中的硬编码时间戳替换为前置生成的时间戳变量即可,!!为dbplyr的变量注入语法,避免SQL转换时识别出错:
tbl(connect, "accotdebits") %>% filter(dates > !!ts_start & dates < !!ts_end & tranx_status == "Successfull") %>% collect()
内容的提问来源于stack exchange,提问作者Yomi.blaze93
相关产品推荐
相关产品推荐

