Oracle中上月周五的精彩瞬间(oracle中上月周五)

Oracle中上月周五的精彩瞬间

作为一名Oracle数据库爱好者,在日常使用中我们经常会遇到一些数据的需求问题。比如:要求查询上个月的数据中某个日期的数据。但是如果选择直接写出日期,那么又面临着每月天数不同的问题。此时,我们需要用一些技巧才能轻松实现目标。以下是介绍Oracle中如何查询上月的周五的数据。

方法示例:

我们可以使用下面这个查询来查询上个月的最后一个周五的日期:

SELECT LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, ‘MM’), -1)) + INTERVAL ‘1’ DAY – (CASE WHEN TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, ‘MM’), -1)), ‘D’) >=6 THEN (TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, ‘MM’), -1)), ‘D’)-6) ELSE (TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, ‘MM’), -1)), ‘D’)+1) END) DAY AS 上月最后一个周五的日期 FROM DUAL;

其中,LAST_DAY函数用于获取指定日期所在月份的最后一天日期,ADD_MONTHS函数则用于获取上个月的日期。这两个函数的组合,相当于获取了上个月的最后一天日期。

然后我们用‘+ INTERVAL ‘1’ DAY’来获得上个月最后一天的第二天的日期。

接着,我们使用CASE WHEN语句根据最后一天日期是星期几来计算上个月最后一个周五的日期。

TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, ‘MM’), -1)), ‘D’)是用于获取上个月最后一天日期是星期几的数字表示。如果是6或7,说明最后一天是星期六或星期日,则结果需要减去5或4才能得到上个月最后一个周五的日期。否则,最后一天数据加上即可。

代码示例:

— 新建测试表

CREATE TABLE test_table (

id NUMBER(11),

name VARCHAR2(50),

days DATE

);

— 添加测试数据

INSERT INTO test_table(id,name,days)

SELECT 1,’test’,TO_DATE(‘2021-06-04′,’YYYY-MM-DD’) FROM DUAL UNION ALL

SELECT 2,’test’,TO_DATE(‘2021-06-11′,’YYYY-MM-DD’) FROM DUAL UNION ALL

SELECT 3,’test’,TO_DATE(‘2021-06-18′,’YYYY-MM-DD’) FROM DUAL UNION ALL

SELECT 4,’test’,TO_DATE(‘2021-06-25′,’YYYY-MM-DD’) FROM DUAL UNION ALL

SELECT 5,’test’,TO_DATE(‘2021-07-02′,’YYYY-MM-DD’) FROM DUAL;

— 查询上月最后一个周五的日期

SELECT LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, ‘MM’), -1)) + INTERVAL ‘1’ DAY – (CASE WHEN TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, ‘MM’), -1)), ‘D’) >=6 THEN (TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, ‘MM’), -1)), ‘D’)-6) ELSE (TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, ‘MM’), -1)), ‘D’)+1) END) DAY AS 上月最后一个周五的日期 FROM DUAL;

—————–

输出结果:

—————–

上月最后一个周五的日期

———————

2021/06/25

可以看到,我们成功地获取了上个月最后一个周五的日期为2021/06/25。在实际生产环境中,可以将这个查询添加到存储过程中,实现更加智能化的数据查询。通过本文的介绍,相信你也可以轻松实现类似的查询方式,提高数据处理的效率和准确性。


数据运维技术 » Oracle中上月周五的精彩瞬间(oracle中上月周五)