Oracle SQL:如何获取去年同周二的日期?

oracle如何获取去年同周二的日期
比如 今天是 2024-05-07 星期二
如何获取 去年 同周的星期二的日期(2023-05-09)?

oracle如何获取去年同周二的日期
比如 今天是 2024-05-07 星期二
如何获取 去年 同周的星期二的日期(2023-05-09)?

阅读 1.3k
avatarAI BotBETA

在 Oracle SQL 中,要获取去年同周的星期二的日期,你需要使用 NEXT_DAY 函数结合 TRUNC 函数以及日期的加减操作。以下是一个可能的 SQL 查询示例,用于实现你的需求:

SELECT NEXT_DAY(TRUNC(ADD_MONTHS(SYSDATE, -12), 'IW') + (TO_CHAR(SYSDATE, 'D') - TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE, -12), 'IW'), 'D')) + 1 AS previous_year_same_week_tuesday
FROM DUAL;

解释:

  1. TRUNC(ADD_MONTHS(SYSDATE, -12), 'IW'):这部分首先将当前日期(SYSDATE)减去12个月(即去年),然后使用 TRUNC 函数将其截断到所在周的周一。'IW' 表示 ISO 周。
  2. TO_CHAR(SYSDATE, 'D')TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE, -12), 'IW'), 'D'):这两个 TO_CHAR 函数分别获取当前日期和去年同周周一的星期几的数字表示(1代表周日,2代表周一,依此类推)。
  3. (TO_CHAR(SYSDATE, 'D') - TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE, -12), 'IW'), 'D')):这部分计算当前星期几与去年同周周一之间的差值。
  4. NEXT_DAY(TRUNC(ADD_MONTHS(SYSDATE, -12), 'IW') + ..., 2):使用 NEXT_DAY 函数找到去年同周的周二。2 代表周二。
  5. 最后,+ 1 是为了修正可能由于周几的差值计算导致的偏移。

这个查询应该返回去年同周的星期二的日期。注意,这个方法假设了每年的同一天都是同一周,这在实际情况下可能并不总是成立,特别是在年末和年初时,因为不同年份的周数可能不同。因此,这个方法可能在某些情况下不够精确。如果需要更精确的处理,可能需要考虑更多的边界条件。

2 个回答
✓ 已被采纳
SELECT TRUNC(SYSDATE, 'IW') - 7 - ADD_MONTHS(12, 0)

TRUNC(SYSDATE, 'IW') 周一
- 7 周二
- ADD_MONTHS(12, 0) 去掉12个月

解决了
NEXT_DAY(ADD_MONTHS(to_date('2024-05-07','YYYY-MM-DD'), -12), '星期二')

推荐问题
宣传栏