Oracle ROUND(date) 函数使用指南

Oracle ROUND(date) 是一个内置函数,它将给定的日期四舍五入到指定的单位。

Oracle ROUND(date) 语法

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

ROUND(date)
ROUND(date, fmt)

参数

date

必需的。需要四舍五入的日期/日期时间表达式。 它必须是一个 DATE 类型的值。

fmt

可选的。它指定了四舍五入的单位。如果未指定此参数,date 将被四舍五入到最近的天。

下表整理了 fmt 可用的值:

单位化模型 单位
CC, SCC 比四位数年份的前两位数大一位数。
SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y 年(7 月 1 日向上舍入)。
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 ROUND(date) 函数返回一个四舍五入后的值。返回值总是 DATE 数据类型。

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

Oracle ROUND(date) 示例

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

基本用法

下面的语句按照默认的单位对 2023-02-12 11:59:59 进行四舍五入:

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

输出:

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

这里,由于我们没有指定 fmt 参数, 2023-02-12 11:59:59 将被舍入到最近的天。并且因为它早于 12 点,因此时间部分被舍去,返回了当天。

让我们再看一个时间晚于 12 点的值:

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

输出:

ROUND(TO_DATE('2023-02-1212:01:01','YYYY-MM-DDHH24:MI:SS'))
______________________________________________________________
2023-02-13

这里,由于时间晚于 12 点,因此返回了下一天。

Oracle ROUND(date) 函数允许您将日期时间四舍五入到指定的单位。请继续看下面的示例。

四舍五入到年

Oracle ROUND(date) 函数允许您将日期时间四舍五入到年,请使用 YEAR 单位:

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

输出:

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

在本示例中,2023-06-30 被向下舍入到 2023-01-012023-07-01 被向上舍入到 2024-01-01

月份

Oracle ROUND(date) 函数允许您将日期时间四舍五入到月,请使用 MONTH 单位:

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

输出:

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

在本示例中,2023-02-15 被向下舍入到 2023-02-012023-02-16 被向上舍入到 2023-03-01

NULL 参数

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

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

输出:

   NULL_1 NULL_2       NULL_3
_________ _________ _________
     NULL NULL           NULL

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

结论

Oracle ROUND(date) 是一个内置函数,它将给定的日期四舍五入到指定的单位。