在 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 中加入表后,通过从当前日期中减去日期列来创建新列的主要内容,如果未能解决你的问题,请参考以下文章
Netezza 中 NEXTDAY 的 Impala SQL 等效函数是啥?