DATE_TRUNC
📄字数 1.2K
👁️阅读量 加载中...
功能描述
将时间戳或时间间隔截断到指定的时间单位。
语法格式
sql
DATE_TRUNC(FIELD, SOURCE[, TIMEZONE])输入参数
FIELD:要截断的时间单位,VARCHAR类型。SOURCE:被截断的时间戳或时间间隔,DATETINE、DATETINE WITH TIME ZONE或INTERVAL类型,或能隐式转换为DATETINE、DATETINE WITH TIME ZONE或INTERVAL类型的其他类型。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 |
+---------------------------------+