📜  PL/SQL 中有用的日期和时间函数

📅  最后修改于: 2022-05-13 01:55:41.941000             🧑  作者: Mango

PL/SQL 中有用的日期和时间函数

日期和时间函数格式是不同的各种数据库。我们将讨论 Oracle 数据库中最常用的函数。

SYSDATE函数返回 7 个字节的数据,其中包括:

  • 世纪
  • 小时
  • 分钟
  • 第二

1.提取():
Oracle 帮助您使用 Extract()函数从日期中提取年、月和日。

  • 示例 1:提取年份:
    SELECT SYSDATE AS CURRENT_DATE_TIME, EXTRACT(Year FROM SYSDATE) AS ONLY_CURRENT_YEAR
    FROM Dual
    

    输出:

    CURRENT_DATE_TIMEONLY_CURRENT_YEAR
    05.Feb.2019 07:29:242019

    解释:
    仅用于从系统日期/当前日期或特定指定日期检索年份

  • 示例 2:提取月份:
    SELECT SYSDATE AS CURRENT_DATE_TIME, EXTRACT(Month FROM SYSDATE) AS ONLY_CURRENT_MONTH
    FROM Dual
    

    输出:

    CURRENT_DATE_TIMEONLY_CURRENT_MONTH
    05.Feb.2019 07:29:24Feb

    解释:
    仅用于从系统日期/当前日期或特定指定日期检索月份

  • 示例 3:提取日:
    SELECT SYSDATE AS CURRENT_DATE_TIME, EXTRACT(Day FROM SYSDATE) AS ONLY_CURRENT_DAY
    FROM Dual
    

    输出:

    CURRENT_DATE_TIMEONLY_CURRENT_DAY
    05.Feb.2019 07:29:245

    解释:
    仅用于检索系统日期/当前日期或特定指定日期的日期。

2. ADD_MONTHS(日期,n):
在 PL/SQL 中使用此方法,您可以添加或减去日期的月数 (n)。这里的“n”可以是负数也可以是正数。

  • 示例 4:
    SELECT ADD_MONTHS(SYSDATE, -1)  AS PREV_MONTH, SYSDATE AS CURRENT_DATE, 
                                     ADD_MONTHS(SYSDATE, 1) as NEXT_MONTH
    FROM Dual
    

    输出:

    PREV_MONTHCURRENT_DATENEXT_MONTH
    02.Jan.2019 09:15:4602.Feb.2019 09:15:4602.Mar.2019 09:15:46

    解释:
    ADD_MONTHS函数有两个参数,一个是日期,它可以是任何指定/特定日期或系统日期作为当前日期,第二个是“n”,它是一个整数值,可以是正数或负数,以获取即将到来的日期或前一个日期。

3. LAST_DAY(日期):
在 PL/SQL 中使用此方法,您可以获得指定日期月份的最后一天。

  • 示例 5:
    SELECT SYSDATE AS CURRENT_DATE, LAST_DAY(SYSDATE) AS LAST_DAY_OF_MONTH, 
                                    LAST_DAY(SYSDATE)+1 AS FIRST_DAY_OF_NEXT_MONTH
    FROM Dual
    

    输出:

    CURRENT_DATELAST_DAY_OF_MONTHFIRST_DAY_OF_NEXT_MONTH
    02.Feb.2019 09:32:0028.Feb.2019 09:32:0001.Mar.2019 09:32:00

    解释:
    在上面的示例中,我们使用 SYSDATE函数获取当前日期,并使用 LAST_DAY函数检索该月的最后日期,该函数也有助于检索下个月的第一天。

  • 示例 6:当月剩余天数
    SELECT SYSDATE AS CURRENT_DATE, LAST_DAY(SYSDATE) - SYSDATE AS DAYS_LEFT_IN_MONTH
    FROM Dual
    

    输出:

    CURRENT_DATEDAYS_LEFT_IN_MONTH
    02.Feb.2019 09:32:0026

4. MONTHS_BETWEEN(日期 1,日期 2):
在 PL/SQL 中使用此方法,您可以计算两个输入日期 date1 和 date2 之间的月数。如果 date1 晚于 date2 则结果为正,如果 date1 早于 date2 则结果为负。

笔记:
如果计算小数月份,MONTHS_BETWEEN函数会根据 31 天的月份计算小数部分。

  • 示例 7:
    SELECT MONTHS_BETWEEN (TO_DATE ('01-07-2003', 'dd-mm-yyyy'), 
                           TO_DATE ('14-03-2003', 'dd-mm-yyyy')) AS NUMBER_OF_MONTHS
    FROM Dual
    

    输出:

    NUMBER_OF_MONTHS
    3.58

    解释:
    这里 date1 和 date2 不在一个月的同一天,这就是为什么我们以小数形式获取值,并且 date1 比 date2 晚,因此结果值是整数。
    Eneterd 日期应该是特定的日期格式,这就是在 MONTHS_BETWEEN函数中比较时使用 TO_DATE函数的原因。

    让我们选择员工为公司工作的月数。

  • 示例 8:
    SELECT MONTHS_BETWEEN (SYSDATE, DATE_OF_HIRE) AS NUMBER_OF_MONTHS
    FROM Employees
    

    输入:

    SYSTEM_DATEDATE_OF_HIRE
    02-02-201931-10-2017
    02-02-201903-12-2017
    02-02-201924-09-2018
    02-02-201922-12-2016
    02-02-201918-06-2018

    输出:

    NUMBER_OF_MONTHS
    15.064
    13.967
    4.290
    25.354
    7.483

5. NEXT_DAY(日期,day_of_week):
它将返回比输入日期晚的第一个工作日的即将到来的日期。它有两个参数第一个日期,可以输入系统日期或指定日期;一周的第二天,应该是字符形式。

  • 示例 9:
    SELECT NEXT_DAY(SYSDATE, 'SUNDAY') AS NEXT_SUNDAY
    FROM Dual
    

    输出:

    NEXT_SUNDAY
    17-FEB-2019

    解释:
    这将有助于提供与日期相对应的下一个即将到来的日期,无论数据类型日期如何,返回类型始终为 DATE。第二个参数必须是全名或缩写的星期几。