将天数添加到时间戳并取回时间戳
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 |
+----------------------------------------------------------------------------------+
在 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 |
+----------------------------------------------------------------------------------+