你如何得到两个"时间戳有/无时区"在几秒钟内使用dplyr?

时间:2017-05-15 09:42:36

标签: r postgresql dplyr

当数据库内(PostgreSQL)dplyr::mutate操作计算两个时间戳之间的差异时,将返回一个字符向量,表单的每个元素如:

> RPostgreSQL::dbGetQuery(db$con, 'select now() - current_date;')
         ?column?
1 09:23:48.880493

在这种情况下,它是HH:MM:SS.ssssss。如何让dplyr以秒为单位返回此时差矢量?也就是说,我想做与here相同的事情,除非将其作为mutate声明的一部分。

示例dplyr代码为:

tbl(db$con, 'tmp_table') %>%
    mutate(time_diff = received_at - started_at) %>%
    select(id, time_diff) %>%
    collect(n = Inf)

1 个答案:

答案 0 :(得分:0)

这对我来说绝不是一个令人满意的答案,但是这样做的一个迂回方式是:

tmp_table <-
tbl(db$con, 'tmp_table') %>%
    mutate(time_diff = received_at - started_at) %>%
    select(id, time_diff) %>%
    compute() # creates a temporary table

然后,您可以使用以下命令查找临时表的名称:

as.character(tmp_table$ops$x$x)

就我而言,这是[1] "rzlhbxogjx"。然后,您可以使用链接的答案:

RPostgreSQL::dbGetQuery(db$con, 
              paste0("select id, extract(epoch from time_diff) 
              as time_diff from ", as.character(tmp_table$ops$x$x), ";")