Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


DATE_TRUNC

📄字数 1.2K
👁️阅读量 加载中...

功能描述

将时间戳或时间间隔截断到指定的时间单位。

语法格式

sql
DATE_TRUNC(FIELD, SOURCE[, TIMEZONE])

输入参数

  • FIELD:要截断的时间单位,VARCHAR 类型。
  • SOURCE:被截断的时间戳或时间间隔,DATETINEDATETINE WITH TIME ZONEINTERVAL 类型,或能隐式转换为 DATETINEDATETINE WITH TIME ZONEINTERVAL 类型的其他类型。
  • TIMEZONE:可选参数,表示将时间戳截断至指定的时区中,VARCHAR 类型。如果不指定,表示将时间戳截断至默认客户端时区(DEF_TIMEZONE)中的指定精度。

FIELD参数取值

FIELD取值说明
millennium截断到千年的第一天。
century截断到百年的第一天。
decade截断到十年的第一天。
year截断到年的第一天。
quarter截断到季度的第一天。
month截断到月份的第一天。
week截断到星期一。INTERVAL 类型值不支持指定 week 进行截断。
day截断到天(即午夜 00:00:00)。
hour截断到小时。
minute截断到分钟。
second截断到秒。
milliseconds截断到毫秒。
microseconds截断到微秒。

提示

  • NULL 无具体的类型,当第二个参数为 NULL 时,会产生异常 E10100 候选函数出现多义性,需要手动为参数指定具体的形参类型,如:DATE_TRUNC(NULL, NULL::DATE)

输出结果

返回值类型和 SOURCE 的类型保持一致,任意输入参数为 NULL 时,输出结果为 NULL

示例

sql
-- 将'2020-10-20 12:30:25.5020555'时间戳截断到'year'单位
SQL> SELECT DATE_TRUNC('year', '2020-10-20 12:30:25.5020555');

+--------------------------+
|          EXPR1           |
+--------------------------+
| 2020-01-01 00:00:00.000  |
+--------------------------+

-- 将'20 12:30:25.5020555'时间间隔截断到'milliseconds'单位
SQL> SELECT DATE_TRUNC('milliseconds', '20 12:30:25.5020555'::INTERVAL DAY TO SECOND);

+-------------------------+
|          EXPR1          |
+-------------------------+
|      20 12:30:25.502000 |
+-------------------------+

-- 将'2020-10-20 12:30:25.5020555'时间戳截断到指定的'GMT+06:00'时区的'hour'单位
SQL> SELECT DATE_TRUNC('hour', '2020-10-20 12:30:25.5020555','GMT+06:00');

+---------------------------------+
|              EXPR1              |
+---------------------------------+
| 2020-10-20 12:00:00.000  +08:00 |
+---------------------------------+

-- 将'2020-10-20 12:30:25.5020555'时间戳截断到指定的'GMT-04:00'时区的'milliseconds'单位
SQL> SELECT DATE_TRUNC('milliseconds', '2020-10-20 12:30:25.5020555','GMT-04:00');

+---------------------------------+
|              EXPR1              |
+---------------------------------+
| 2020-10-20 12:30:25.502  +08:00 |
+---------------------------------+