- 类别:
TIMEDIFF¶
根据指定的日期或时间部分计算两个日期、时间或时间戳表达式之间的差异。该函数返回从第三个实参中减去第二个实参的结果。
DATEDIFF 的替代项。
语法¶
TIMEDIFF( <date_or_time_part> , <date_or_time_expr1> , <date_or time_expr2> )
实参¶
date_or_time_part
时间单位。必须是 支持的日期和时间部分 中列出的一个值(例如
month
)。该值可以是字符串字面量,也可以不带引号(例如'month'
或month
)。date_or_time_expr1
、date_or_time_expr2
要比较的值。必须是日期、时间、时间戳或计算结果为日期、时间或时间戳的表达式。从
date_or_time_expr2
中减去date_or_time_expr1
值。
返回¶
返回一个整数,表示 date_or_time_expr2
和 date_or_time_expr1
之间的单位数(秒、天等)差值。
使用说明¶
输出值可以是负数,例如 -12 天。
date_or_time_expr1
和date_or_time_expr2
可以是日期、时间或时间戳。此函数支持年、季度、月、周、日、小时、分钟、秒、毫秒、微秒和纳秒的单位。
date_or_time_part
必须是 支持的日期和时间部分 中列出的值之一。如果
date_or_time_part
是week
(或其任何变体),则输出由 WEEK_START 会话参数所控制。有关更多详细信息(包括示例),请参阅 日历周和工作日。用于计算差值的单位(例如
month
)确定了 DATE、TIME 或 TIMESTAMP 字段的哪些部分用于确定结果,从而确定了结果的精度。不使用较小的单位,因此值不会四舍五入。例如,即使 2021 年 1 月 1 日和 2021 年 2 月 28 日之间的差值接近两个月而不是一个月,但以下查询返回一个月:
DATEDIFF(month, '2021-01-01'::DATE, '2021-02-28'::DATE)
对于 DATE 值:
year
仅使用年份,而忽略所有其他部分。month
使用月份和年份。day
使用整个日期。
对于 TIME 值:
hour
仅使用小时,而忽略所有其他部分。minute
使用小时和分钟。second
使用小时、分钟和秒,但不使用小数秒。millisecond
使用小时、分钟、秒和小数秒的前三位数字。小数秒数不四舍五入。例如,DATEDIFF(milliseconds, '2024-02-20 21:18:41.0000', '2024-02-20 21:18:42.1239')
返回 1.123 秒,而不是 1.124 秒。microsecond
使用小时、分钟、秒和小数秒的前六位数字。小数秒数不四舍五入。nanosecond
使用小时、分钟、秒和小数秒的所有九位数字。
对于 TIMESTAMP 值:
这些规则与上述 DATE 和 TIME 数据类型的规则相匹配。仅使用指定的单位和较大单位。
示例¶
这显示了减去两个日期的结果,其中第二个日期比第一个日期晚两年:
SELECT TIMEDIFF(YEAR, '2017-01-01', '2019-01-01') AS Years; +-------+ | YEARS | |-------| | 2 | +-------+
这表明该值被截断而不是四舍五入。差异更接近 12 个月而不是 11 个月,但 Snowflake 将差异计算为 11 个月:
SELECT TIMEDIFF(MONTH, '2017-01-1', '2017-12-31') AS Months; +--------+ | MONTHS | |--------| | 11 | +--------+
DATEDIFF 中还有其他示例。