VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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)