获取 SparkSQL 中两个日期时间之间的天数差异

Get days difference between two datetimes in SparkSQL

我想获得 SparkSQL 中两个日期时间之间 整数 天的差异,但它忽略了时间部分并且 returns 结果与预期不同。

例如下面的查询returns9,但我期望是8:

SELECT DATEDIFF(CAST('2021-07-10 02:26:16' AS TIMESTAMP), CAST('2021-07-01 19:10:28' AS TIMESTAMP))

我可以通过将 datetime 转换为 long 来达到预期的结果,因此我可以获得它们之间的秒差并将结果转换为天数,转换为整数,例如:

SELECT CAST((CAST(CAST('2021-07-10 02:26:16' AS TIMESTAMP) AS LONG) - CAST(CAST('2021-07-01 19:10:28' AS TIMESTAMP) AS LONG))/(60*60*24) AS INTEGER)

我想知道是否有 'more recommended way' 这样做,比如使用一些内置的 SparkSQL 函数。

提前致谢。

我建议使用 extract SQL function 并将其应用于间隔(两个时间戳的差异)。

Extracts a part of the date/timestamp or interval source

*) extract 函数在从 3.x 版本开始的 Spark 中可用。

参见下面的示例

WITH input AS (
    select TIMESTAMP'2021-07-10 02:26:16' t2,
           TIMESTAMP'2021-07-01 19:10:28' t1
)
SELECT
    datediff(t2, t1) `datediff`,
    extract(day FROM t2-t1) `extract`
FROM input

returns

datediff extract
9 8