将天数添加到时间戳并取回时间戳

Add days to timestamp and get a timestamp back

在 Spark SQL 中,我找不到将天数添加到时间戳并返回时间戳的函数,我可以使用计算值来实现。

这有效,但是 static

SELECT col1 + interval 2 days FROM 

VALUES make_timestamp(2021, 12, 28, 6, 30, 45.887)

我需要一个我可以计算的。这不起作用(我也不能用列值填充它):

SELECT col1 + interval (5-3) days 

FROM VALUES make_timestamp(2021, 12, 28, 6, 30, 45.887)

这也不好(因为它给出了一个日期):

SELECT date_add(col1,1) FROM 

VALUES make_timestamp(2021, 12, 28, 6, 30, 45.887)

一种方法是将时间戳转换为 unix 时间并添加所需的秒数。

scala> spark.sql("select from_unixtime(unix_timestamp('2021-10-15 10:11:12') + 10 * 24*60*60) plus10days").show(false)
+-------------------+
|plus10days         |
+-------------------+
|2021-10-25 10:11:12|
+-------------------+

您可以使用 concat SQL function and then cast it to an interval with cast SQL function:

构建代表您的区间的字符串,而不是直接使用区间构造函数
SELECT col1 + cast(concat(5-3, ' days') as interval)

FROM VALUES make_timestamp(2021, 12, 28, 6, 30, 45.887)

其中 returns 结果如下:

+----------------------------------------------------------------------------------+
|CAST(col1 + CAST(concat(CAST((5 - 3) AS STRING),  days) AS INTERVAL) AS TIMESTAMP)|
+----------------------------------------------------------------------------------+
|2021-12-30 06:30:45.887                                                           |
+----------------------------------------------------------------------------------+