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 |
+---------------------------------+