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_TIME ONLY_CURRENT_YEAR 05.Feb.2019 07:29:24 2019 解释:
仅用于从系统日期/当前日期或特定指定日期检索年份。 - 示例 2:提取月份:
SELECT SYSDATE AS CURRENT_DATE_TIME, EXTRACT(Month FROM SYSDATE) AS ONLY_CURRENT_MONTH FROM Dual
输出:
CURRENT_DATE_TIME ONLY_CURRENT_MONTH 05.Feb.2019 07:29:24 Feb 解释:
仅用于从系统日期/当前日期或特定指定日期检索月份。 - 示例 3:提取日:
SELECT SYSDATE AS CURRENT_DATE_TIME, EXTRACT(Day FROM SYSDATE) AS ONLY_CURRENT_DAY FROM Dual
输出:
CURRENT_DATE_TIME ONLY_CURRENT_DAY 05.Feb.2019 07:29:24 5 解释:
仅用于检索系统日期/当前日期或特定指定日期的日期。
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_MONTH CURRENT_DATE NEXT_MONTH 02.Jan.2019 09:15:46 02.Feb.2019 09:15:46 02.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_DATE LAST_DAY_OF_MONTH FIRST_DAY_OF_NEXT_MONTH 02.Feb.2019 09:32:00 28.Feb.2019 09:32:00 01.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_DATE DAYS_LEFT_IN_MONTH 02.Feb.2019 09:32:00 26
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_DATE DATE_OF_HIRE 02-02-2019 31-10-2017 02-02-2019 03-12-2017 02-02-2019 24-09-2018 02-02-2019 22-12-2016 02-02-2019 18-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。第二个参数必须是全名或缩写的星期几。