获取 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
我想获得 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 |