PL/SQL - 日期和时间

  • 简述

    在本章中,我们将讨论 PL/SQL 中的日期和时间。PL/SQL 中有两类与日期和时间相关的数据类型 -
    • 日期时间数据类型
    • 区间数据类型
    日期时间数据类型是 -
    • 日期
    • 时间戳
    • 带时区的时间戳
    • 带有当地时区的时间戳
    间隔数据类型是 -
    • 年到月的间隔
    • 间隔天到第二天
  • 日期时间和间隔数据类型的字段值

    两个都 datetimeinterval 数据类型包括 fields. 这些字段的值决定了数据类型的值。下表列出了日期时间和间隔的字段及其可能的值。
    字段名称 有效的日期时间值 有效间隔值
    YEAR -4712 到 9999(不包括第 0 年) 任何非零整数
    MONTH 01 至 12 0 到 11
    DAY 01 到 31(受 MONTH 和 YEAR 的值限制,根据区域设置的日历规则) 任何非零整数
    HOUR 00 到 23 0 到 23
    MINUTE 00 至 59 0 到 59
    SECOND
    00 到 59.9(n),其中 9(n) 是时间小数秒的精度
    9(n) 部分不适用于 DATE。
    0 到 59.9(n),其中 9(n) 是间隔小数秒的精度
    TIMEZONE_HOUR
    -12 到 14(范围适应夏令时的变化)
    不适用于 DATE 或 TIMESTAMP。
    不适用
    TIMEZONE_MINUTE
    00 至 59
    不适用于 DATE 或 TIMESTAMP。
    不适用
    TIMEZONE_REGION 不适用于 DATE 或 TIMESTAMP。 不适用
    TIMEZONE_ABBR 不适用于 DATE 或 TIMESTAMP。 不适用
  • 日期时间数据类型和函数

    以下是日期时间数据类型 -

    日期

    它以字符和数字数据类型存储日期和时间信息。它由有关世纪、年、月、日、时、分和秒的信息组成。它被指定为 -

    时间戳

    它是 DATE 数据类型的扩展。它存储 DATE 数据类型的年、月和日,以及小时、分钟和秒值。它对于存储精确的时间值很有用。

    带时区的时间戳

    它是 TIMESTAMP 的变体,在其值中包含时区区域名称或时区偏移量。时区偏移量是本地时间和 UTC 之间的差异(以小时和分钟为单位)。此数据类型可用于跨地理区域收集和评估日期信息。

    带有当地时区的时间戳

    它是 TIMESTAMP 的另一种变体,在其值中包含时区偏移量。
    下表提供了日期时间函数(其中 x 具有日期时间值) -
    序号 函数名称和描述
    1
    ADD_MONTHS(x, y);
    添加 y 几个月到 x.
    2
    LAST_DAY(x);
    返回该月的最后一天。
    3
    MONTHS_BETWEEN(x, y);
    返回之间的月数 xy.
    4
    NEXT_DAY(x, day);
    返回第二天的日期时间x.
    5
    NEW_TIME;
    从用户指定的时区返回时间/日期值。
    6
    ROUND(x [, unit]);
    回合 x.
    7
    SYSDATE();
    返回当前日期时间。
    8
    TRUNC(x [, unit]);
    截断 x.
    时间戳函数(其中,x 具有时间戳值) -
    序号 函数名称和描述
    1
    CURRENT_TIMESTAMP();
    返回包含当前会话时间和会话时区的 TIMESTAMP WITH TIME ZONE。
    2
    EXTRACT({ YEAR | MONTH | DAY | HOUR | MINUTE | SECOND } | { TIMEZONE_HOUR | TIMEZONE_MINUTE } | { TIMEZONE_REGION | } TIMEZONE_ABBR ) FROM x)
    从中提取并返回年、月、日、小时、分钟、秒或时区 x.
    3
    FROM_TZ(x, time_zone);
    将 TIMESTAMP x 和 time_zone 指定的时区转换为 TIMESTAMP WITH TIMEZONE。
    4
    LOCALTIMESTAMP();
    返回包含会话时区本地时间的 TIMESTAMP。
    5
    SYSTIMESTAMP();
    返回包含当前数据库时间和数据库时区的 TIMESTAMP WITH TIME ZONE。
    6
    SYS_EXTRACT_UTC(x);
    将 TIMESTAMP WITH TIMEZONE x 转换为包含 UTC 日期和时间的 TIMESTAMP。
    7
    TO_TIMESTAMP(x, [format]);
    将字符串 x 转换为 TIMESTAMP。
    8
    TO_TIMESTAMP_TZ(x, [format]);
    将字符串 x 转换为 TIMESTAMP WITH TIMEZONE。

    例子

    以下代码片段说明了上述功能的使用 -
    Example 1
    
    SELECT SYSDATE FROM DUAL; 
    
    Output
    
    08/31/2012 5:25:34 PM 
    
    Example 2
    
    SELECT TO_CHAR(CURRENT_DATE, 'DD-MM-YYYY HH:MI:SS') FROM DUAL; 
    
    Output
    
    31-08-2012 05:26:14
    
    Example 3
    
    SELECT ADD_MONTHS(SYSDATE, 5) FROM DUAL;
    
    Output
    
    01/31/2013 5:26:31 PM 
    
    Example 4
    
    SELECT LOCALTIMESTAMP FROM DUAL; 
    
    Output
    
    8/31/2012 5:26:55.347000 PM 
    
  • 间隔数据类型和函数

    以下是间隔数据类型 -
    • IINTERVAL YEAR TO MONTH - 它使用 YEAR 和 MONTH 日期时间字段存储一段时间。
    • INTERVAL DAY TO SECOND - 它以天、小时、分钟和秒为单位存储一段时间。

    区间函数

    序号 函数名称和描述
    1
    NUMTODSINTERVAL(x, interval_unit);
    将数字 x 转换为 INTERVAL DAY TO SECOND。
    2
    NUMTOYMINTERVAL(x, interval_unit);
    将数字 x 转换为 INTERVAL YEAR TO MONTH。
    3
    TO_DSINTERVAL(x);
    将字符串 x 转换为 INTERVAL DAY TO SECOND。
    4
    TO_YMINTERVAL(x);
    将字符串 x 转换为 INTERVAL YEAR TO MONTH。