类别:

日期和时间函数

TIMEDIFF

根据指定的日期或时间部分计算两个日期、时间或时间戳表达式之间的差异。该函数返回从第三个实参中减去第二个实参的结果。

DATEDIFF 的替代项。

语法

TIMEDIFF( <date_or_time_part> , <date_or_time_expr1> , <date_or time_expr2> )
Copy

实参

date_or_time_part

时间单位。必须是 支持的日期和时间部分 中列出的一个值(例如 month)。该值可以是字符串字面量,也可以不带引号(例如 'month'month)。

date_or_time_expr1date_or_time_expr2

要比较的值。必须是日期、时间、时间戳或计算结果为日期、时间或时间戳的表达式。从 date_or_time_expr2 中减去 date_or_time_expr1 值。

返回

返回一个整数,表示 date_or_time_expr2date_or_time_expr1 之间的单位数(秒、天等)差值。

使用说明

  • 输出值可以是负数,例如 -12 天。

  • date_or_time_expr1date_or_time_expr2 可以是日期、时间或时间戳。

  • 此函数支持年、季度、月、周、日、小时、分钟、秒、毫秒、微秒和纳秒的单位。

  • date_or_time_part 必须是 支持的日期和时间部分 中列出的值之一。

    如果 date_or_time_partweek (或其任何变体),则输出由 WEEK_START 会话参数所控制。有关更多详细信息(包括示例),请参阅 日历周和工作日

  • 用于计算差值的单位(例如 month)确定了 DATE、TIME 或 TIMESTAMP 字段的哪些部分用于确定结果,从而确定了结果的精度。

    不使用较小的单位,因此值不会四舍五入。例如,即使 2021 年 1 月 1 日和 2021 年 2 月 28 日之间的差值接近两个月而不是一个月,但以下查询返回一个月:

    DATEDIFF(month, '2021-01-01'::DATE, '2021-02-28'::DATE)
    
    Copy

    对于 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 |
+-------+
Copy

这表明该值被截断而不是四舍五入。差异更接近 12 个月而不是 11 个月,但 Snowflake 将差异计算为 11 个月:

SELECT TIMEDIFF(MONTH, '2017-01-1', '2017-12-31') AS Months;
+--------+
| MONTHS |
|--------|
|     11 |
+--------+
Copy

DATEDIFF 中还有其他示例。

语言: 中文