Oracle TRUNC(date) 函数使用指南

Oracle TRUNC(date) 是一个内置函数,它将给定的日期截断到指定的单位。

Oracle TRUNC(date) 语法

这里是 Oracle TRUNC(date) 函数的语法:

TRUNC(date)
TRUNC(date, fmt)

参数

date

必需的。需要截断的日期/日期时间表达式。 它必须是一个 DATE 类型的值。

fmt

可选的。它指定了截断的单位。如果未指定此参数,date 将被截断到天(DD)。

下表整理了 fmt 可用的值:

单位化模型 单位
CC, SCC 比四位数年份的前两位数大一位数。
SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y
IYYY, IYY, IY, I 包含 ISO 8601 标准定义的日历周的年份。
Q 季度。
MONTH, MON, MM, RM 月份。
WW 与一年的第一天相同的星期几。
IW 与根据 ISO 8601 标准定义的日历周第一天相同的星期一。
W 与一个月的第一天相同的星期几。
DDD, DD, J
DAY, DY, D 一周的开始日期。
HH, HH12, HH24 小时。
MI 分钟。

返回值

Oracle TRUNC(date) 函数返回一个截断后的日期时间值。返回值总是 DATE 数据类型。

如果任意一个参数为 NULLTRUNC(date) 将返回 NULL

Oracle TRUNC(date) 示例

这里有几个展示了 Oracle TRUNC(date) 函数用法的示例。

基本用法

下面的语句按照默认的单位对 2023-02-12 11:59:59 进行截断:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
SELECT
  TRUNC(TO_DATE('2023-02-12 11:59:59', 'YYYY-MM-DD HH24:MI:SS'))
FROM dual;

输出:

TRUNC(TO_DATE('2023-02-1211:59:59','YYYY-MM-DDHH24:MI:SS'))
______________________________________________________________
2023-02-12

这里,由于我们没有指定 fmt 参数, 2023-02-12 11:59:59 将被截断到天。

截断到年

Oracle TRUNC(date) 函数允许您将日期时间截断到年,请使用 YEAR 单位:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
SELECT
  TRUNC(DATE '2023-06-30', 'YEAR') "2023-06-30",
  TRUNC(DATE '2023-07-01', 'YEAR') "2023-07-01"
FROM dual;

输出:

2023-06-30    2023-07-01
_____________ _____________
2023-01-01    2023-01-01

月份

Oracle TRUNC(date) 函数允许您将日期时间截断到月,请使用 MONTH 单位:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
SELECT
  TRUNC(DATE '2023-02-15', 'MONTH') "2023-02-15",
  TRUNC(DATE '2023-02-16', 'MONTH') "2023-02-16"
FROM dual;

输出:

2023-02-15    2023-02-16
_____________ _____________
2023-02-01    2023-02-01

TRUNC(date) vs ROUND(date)

TRUNC(date) 用于截断一个日期,而 ROUND(date) 用于对日期四舍五入。下面的示例说明这一点:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
SELECT
  TRUNC(DATE '2023-07-01', 'YEAR') "TRUNC 2023-07-01",
  ROUND(DATE '2023-07-01', 'YEAR') "ROUND 2023-07-01"
FROM dual;

输出:

TRUNC 2023-07-01    ROUND 2023-07-01
___________________ ___________________
2023-01-01          2024-01-01

NULL 参数

如果任意一个参数为 NULLTRUNC(date) 将返回 NULL

SET NULL 'NULL';
SELECT
    TRUNC(NULL, 'YEAR') NULL_1,
    TRUNC(DATE '2023-02-15', NULL) NULL_2,
    TRUNC(NULL, NULL) NULL_3
FROM dual;

输出:

   NULL_1 NULL_2       NULL_3
_________ _________ _________
     NULL NULL           NULL

在本示例中,我们使用 SET NULL 'NULL'; 语句将 NULL 值显示为 'NULL' 字符串。

结论

Oracle TRUNC(date) 是一个内置函数,它将给定的日期截断到指定的单位。