编写循环以引入两种不同的日期格式

时间:2018-08-02 17:18:37

标签: sql r

我需要使用R编写来自R环境所连接的数据库的查询。查询的结构如下:

ALTER TABLE cph.table_id ADD PARTITION (event_date = 'YYYY-MM-DD')
LOCATION 's3://external-dwh-company-com/id-to-idl/YYYYMMDD'

例如,今天的添加内容如下:

ALTER TABLE cph.table_id ADD PARTITION (event_date = '2018-08-02')
LOCATION 's3://external-dwh-company-com/id-to-idl/20180802'

问题是,我需要对回溯至03/01/2018的每个数据进行此操作。

因此步骤如下:

initial_query <- paste(#however the above query would be formatted with the dates)

results_query <- dbGetQuery(conn,  initial_query)

但是,对我来说,最大的障碍是1.)为第一部分弄清楚paste的格式,并2.)创建一个循环,使我可以执行上述步骤直到当前日期。 / p>

1 个答案:

答案 0 :(得分:0)

请考虑使用lapplyseq遍历自目标开始日期以来的天数范围,并用sprintf和相应的日期格式连接字符串:

# GET DIFFERENCE BETWEEN TODAY AND DESIRED BEGIN DATE
date_diff <- Sys.Date() - as.Date("2018-03-01")

date_diff[[1]]
# 155

sql <- "ALTER TABLE cph.table_id ADD PARTITION (event_date = '%s')
        LOCATION 's3://external-dwh-company-com/id-to-idl/%s'"

# RUN QUERY SEQUENTIALLY ADDING TO BEGIN DATE
output <- lapply(seq(1, date_diff[[1]]), function(i)
             dbGetQuery(conn, sprintf(sql, strftime(as.Date("2018-03-01") + i, "%Y-%m-%d"),
                                           strftime(as.Date("2018-03-01") + i, "%Y%m%d"))))