【问题标题】:R SQLDF difference between two timestamps in days?R SQLDF 两个时间戳之间的天数差异?
【发布时间】:2020-02-22 19:06:30
【问题描述】:

我正在使用 SQLDF 包,我需要在其中获取转换为不同格式(如秒和日期)的时间戳之间的差异。我在文档中找不到任何时间戳对象,尝试了这个建议here,出现故障,所以

如何计算 R 中使用 SQLDF 包的时间戳之间的差异?

> sqldf("SELECT strftime('%Y-%m-%d %H:%M:%S', '2017-10-10 10:10:10')-  strftime('%Y-%m-%d %H:%M:%S', '2019-01-01 01:01:01') AS timestamp2")

timestamp2
1       -2


> sqldf("SELECT '2017-10-10 10:10:10'-'2019-01-01 01:01:01'")

'2017-10-10 10:10:10'-'2019-01-01 01:01:01'
1                                          -2

【问题讨论】:

    标签: r sqldf


    【解决方案1】:

    您的困惑可能与将 R 中存在的 strftime() 函数与 SQLite 中也存在的同名函数混淆有关。请记住,sqldf 包会将查询字符串中的任何内容作为 SQLite 代码运行,如果您想要以秒为单位的差异,您应该使用:

    SELECT
        strftime('%s', '2017-10-10 10:10:10') -
        strftime('%s', '2019-01-01 01:01:01');
    

    这将返回-38674251,对应于第二个时间戳比第一个时间戳晚大约 1.25 年。

    【讨论】:

    • 这个页面描述了SQLite的时间和日期函数:sqlite.org/lang_datefunc.html另外注意如果你使用不同的后端到sqldf那么会有其他的函数。
    • 是获得其他单位差异除以不同因素的秒数的唯一方法吗?例如。 sqldf("SELECT (strftime('%s', '2017-10-10 10:10:10')- strftime('%s', '2019-01-01 01:01:01'))/3600/24 AS timestamp2") 以天为单位返回差异。
    • 在H2后端datediff('day', date1, date2)可以使用。见h2database.com/html/functions.html
    • @G.Grothendieck 我实际上在 CSV 中拥有所有数据,但是对于 SQL 实践,我想要一些 SQL 包,它允许我运行所有具有大多数功能的东西(我通常在数据表中很好地做到这一点,但现在尝试用 SQL 做所有事情)。你会怎么做?我发现 SQLDF 中缺少的命令非常有限。 H2 会更好吗?
    • 它支持sqlite、h2、mysql和postgresql。 postgresql 是其中最强大的,但您必须正确安装和配置它。 sqlite 是默认的,h2 只需要你安装 java,这很容易做到。我通常发现 sqlite 可以满足我的大部分需求,但 h2 更适合日期和时间。
    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多