在 SQL 中加入表后,通过从当前日期中减去日期列来创建新列

Posted

技术标签:

【中文标题】在 SQL 中加入表后,通过从当前日期中减去日期列来创建新列【英文标题】:Making new column by subtracting date column from current date after joining tables in SQL 【发布时间】:2021-07-04 02:03:44 【问题描述】:

我有两个表已加入,我想添加到该加入另一列的结果中。此列将是当前日期减去名为start_date 的列日期的结果。我想将新列称为 days,因为差异会以天为单位。

这是我的加入的样子:

SELECT t.kind,
         t.start_date,
         t.user,
         t.user_email,
         t.completed,
         g.name
FROM d_trans AS t
JOIN d_gar AS g
    ON t.rest_id = g.id
WHERE t.completed = false
        AND t.kind = 'RESTING';

我的 SQL 编码技能有限。我通常只在导入数据后使用 R。这在 R 中很简单,但我不确定如何在 SQL 中执行此操作。我在网上寻找类似的问题,我看到像ALTER TABLE ADD 添加一个新列和函数GETDATE() 来获取当前日期,但我尝试的一切都不起作用。我在 AWS 的 Athena 工作我不知道我的问题是否是由于 Athena 的限制造成的。

【问题讨论】:

减法的结果必须有多精确? 舍入不是问题。 【参考方案1】:

使用 date_diff('day', current_date, date_col) 函数:

SELECT   t.kind,
         t.start_date,
         t.user,
         t.user_email,
         t.completed,
         g.name,
         date_diff('day', cast(t.start_date as timestamp), current_timestamp)  as days
FROM d_trans AS t
JOIN d_gar AS g
    ON t.rest_id = g.id
WHERE t.completed = false
        AND t.kind = 'RESTING';

【讨论】:

谢谢,这正是我想要的。然而,输出是负的,我假设如果我只是交换 current_date 和 start_date 的位置,它将是正的。 @Nick 是的,交换它并使用 current_timestamp 而不是 cast(current_date 作为时间戳)

以上是关于在 SQL 中加入表后,通过从当前日期中减去日期列来创建新列的主要内容,如果未能解决你的问题,请参考以下文章

从其他日期时间范围(T-SQL)中减去日期时间范围

如何在sql中减去两个日期列和两个时间列

Netezza 中 NEXTDAY 的 Impala SQL 等效函数是啥?

NodeJs,处理用户投票的到期日期

如何从 MS SQL 表中具有 MM/DD/YYYY 日期的单个列中减去

Bigquery (Standard Sql) - 年月日期格式