TRUNC
功能描述
TRUNC函数可将输入的日期时间值按照指定的格式截取并输出结果。
Oracle兼容模式下,日期时间的返回值格式可通过GUC参数nls_date_format进行设置。
注意事项
将TRUNC函数相加减,可以输出以天为单位的计算结果:
- Oracle兼容模式下,上述运算输出无day(s)字样的纯数字,与Oracle保持一致。
- 在其他兼容模式下,上述运算输出timestamp without time zone计算得到的字符串。
对于
trunc(timestamp without time zone,text)
场景,其结果输出interval而不是numeric,这一点与Oracle不同。
语法格式
TRUNC (date,['fmt'])
参数说明
date
日期时间类型值。
fmt
可选参数,指定截断得到的时间格式。取值及含义如下:
yyyy: 将日期截断到年份,返回输入日期的全年第一天,时间被设置为0时0分0秒。
mm: 将日期截断到月份,返回输入日期的全月第一天,时间被设置为0时0分0秒。
dd: 将日期截断到日,即返回输入日期的年月日,时间被设置为0时0分0秒。(缺省选项)
hh: 将日期截断到小时,返回输入日期的年、月、日和小时,分钟和秒被设置为0分0秒。
mi: 将日期截断到分钟,返回输入日期的年、月、日、小时和分钟,秒数被设置为0秒。
示例
示例1~3展示Oracle兼容模式下的使用效果,示例4、示例5展示除Oracle以外其他兼容模式下的使用效果。
示例1: 将当前日期截断至月份。
1、查询当前日期。
SELECT SYSDATE FROM DUAL;
结果返回如下:
sysdate
---------------------
2023-11-03 15:47:45
(1 row)
2、使用TRUNC函数截断当前日期至月份。
SELECT TRUNC(SYSDATE,'mm');
结果返回如下:
trunc
---------------------
2023-11-01 00:00:00
(1 row)
示例2: 输出TRUNC函数间的计算结果。
select trunc('2024-12-23'::timestamp) - trunc('2023-06-12'::timestamp);
返回结果如下:
?column?
----------
560
(1 row)
示例3: 修改输出日期格式后,使用TRUNC函数截断当前日期至月份。
1、设置GUC参数nls_date_format。
SET nls_date_format='DD-Mon-YYYY';
2、使用TRUNC函数验证输出格式。
SELECT TRUNC(SYSDATE,'mm');
结果返回如下:
trunc
-------------
01-Nov-2023
(1 row)
示例4: (非Oracle兼容模式)将当前日期截断至月份。
1、查询当前日期。
select now();
结果返回如下:
now
-------------------------------
2024-03-05 22:36:14.260504+08
(1 row)
2、使用TRUNC函数截断当前日期至月份。
SELECT TRUNC(now,'mm');
返回结果如下:
trunc
------------------------
2024-03-01 00:00:00+08
(1 row)
示例5: (非Oracle兼容模式)输出TRUNC函数间的计算结果。
select trunc('2024-12-23'::timestamp) - trunc('2023-06-12'::timestamp);
返回结果如下:
?column?
----------
560 days
(1 row)