Oracle如何獲取某年每月第N周星期X的所有日期

2021-12-30 11:23:12 字數 3490 閱讀 3584

oracle如何獲取某年每月第n周星期x的所有日期

要求:列出2023年每月第二週星期二的日期

兩種理解:

www.2cto.com  

1.認為每週第一天為星期一(中國習慣),且需求為第二週周二(非第二個周二)

[sql] 

--基本原理為用下週日之日期,利用decode判斷是上推5日還是下推2日  

[sql] 

select next_day(add_months(trunc(sysdate,'yyyy'),rownum-1),1)  

+decode(next_day(add_months(trunc(sysdate,'yyyy'),rownum-1),1),add_months(trunc(sysdate,'yyyy'),rownum-1)+7,-5,2)  

from dual connect by rownum<13;  

output:  

2012.01.03 00:00:00  

2012.02.07 00:00:00  

2012.03.06 00:00:00  

2012.04.03 00:00:00  

2012.05.08 00:00:00  

2012.06.05 00:00:00  

2012.07.03 00:00:00  

2012.08.07 00:00:00  

2012.09.04 00:00:00  

2012.10.09 00:00:00  

2012.11.06 00:00:00  

2012.12.04 00:00:00  

2013.01.08 00:00:00  

www.2cto.com  

2.認為每週第一天為星期日(外國習慣),且需求為第二週周二(非第二個周二)

[sql] 

--基本原理為用下週六之日期,利用decode判斷是上推4日還是下推3日  

select next_day(add_months(trunc(sysdate,'yyyy'),rownum-1),7)  

+decode(next_day(add_months(trunc(sysdate,'yyyy'),rownum-1),7),add_months(trunc(sysdate,'yyyy'),rownum-1)+7,-4,3)  

from dual connect by rownum<13;  

output:  

2012.01.10 00:00:00  

2012.02.07 00:00:00  

2012.03.06 00:00:00  

2012.04.10 00:00:00  

2012.05.08 00:00:00  

2012.06.05 00:00:00  

2012.07.10 00:00:00  

2012.08.07 00:00:00  

2012.09.04 00:00:00  

2012.10.09 00:00:00  

2012.11.06 00:00:00  

2012.12.04 00:00:00  

2013.01.08 00:00:00  

www.2cto.com  

3.認為每週第一天為星期日(外國習慣),且需求為每月第二個星期二

[sql] 

--基本原理為先構造全年之日期,再利用to_char函式  

--to_char(c1,'w') = 2 表每月第二週  

--to_char(c1,'d') = 3 表周二,值為1表週日  

select c1  

from   

(  select to_date(2012||'-01-01','yyyy-mm-dd')+level c1  

from dual  

connect by level < 366  

)  where to_char(c1,'w') = 2 and  to_char(c1,'d') = 3;  

output:  

2012.01.10 00:00:00  

2012.02.14 00:00:00  

2012.03.13 00:00:00  

2012.04.10 00:00:00  

2012.05.08 00:00:00  

2012.06.12 00:00:00  

2012.07.10 00:00:00  

2012.08.14 00:00:00  

2012.09.11 00:00:00  

2012.10.09 00:00:00  

2012.11.13 00:00:00  

2012.12.11 00:00:00  

總結:不同理解可以得出不同結果,最好能請客戶提供結果,以利判斷。 附:

用於 date/time 轉換的模板

模板 描述

hh 一天的小時數 (01-12)

hh12 一天的小時數 (01-12)

hh24 一天的小時數 (00-23)

mi 分鐘 (00-59)

ss 秒 (00-59)

ssss 午夜後的秒 (0-86399)

am or a.m. or pm or p.m. 正午標識(大寫)

am or a.m. or pm or p.m. 正午標識(小寫)

y,yyy 帶逗號的年(4 和更多位)

yyyy 年(4和更多位)  www.2cto.com  

yyy 年的後三位

yy 年的後兩位

y 年的最後一位

bc or b.c. or ad or a.d. 年標識(大寫)

bc or b.c. or ad or a.d. 年標識(小寫)

month 全長大寫月份名(9字元)

month 全長混合大小寫月份名(9字元)

month 全長小寫月份名(9字元)

mon 大寫縮寫月份名(3字元)

mon 縮寫混合大小寫月份名(3字元)

mon 小寫縮寫月份名(3字元)

mm 月份 (01-12)

day 全長大寫日期名(9字元)

day 全長混合大小寫日期名(9字元)

day 全長小寫日期名(9字元)

dy 縮寫大寫日期名(3字元)

dy 縮寫混合大小寫日期名(3字元)

dy 縮寫小寫日期名(3字元)

ddd 一年裡的日子(001-366)

dd 乙個月裡的日子(01-31)

d 一周裡的日子(1-7;sun=1)

w 乙個月裡的週數

ww 一年裡的週數

cc 世紀(2 位)

j julian 日期(自西元前2023年1月1日來的日期)

q 季度

rm 羅馬數字的月份(i-xii;i=jan)-大寫

rm 羅馬數字的月份(i-xii;i=jan)-小寫

oracle如何獲取awr報告

oracle database 10g 提供了乙個顯著改進的工具 自動工作負載資訊庫 awr awr 和資料庫一起安裝。資料庫裝好後,快照由乙個稱為 mmon 的新的後台程序及其從程序自動地每小時採集一次 snap 要檢視當前的設定,您可以使用下面的語句 select snap interval,r...

Oracle中如何獲取系統當前時間

oracle中如何獲取 系統當前時間 select to char sysdate,yyyy mm dd hh24 mi ss from dual oracle裡獲取乙個時間的年 季 月 周 日的函式 select to char sysdate,yyyy from dual 年 select to...

Oracle中如何獲取系統當前時間

獲取系統日期 sysdate 格式化日期 to char sysdate yy mm dd hh24 mi ss 或 to date sysdate yy mm dd hh24 mi ss 格式化數字 to number 注 to char 把日期或數字轉換為字串 to char number,格式...