2016-06-17 51 views
0

我想從Oracle的sql日期查找季度如何在Oracle查詢中確定每季度的一週

我嘗試了下面的查詢來查找年份,季度和星期。 但周字段給出不

選擇TO_CHAR(SYSDATE,「YYYY」)「的季度週刊」的「當月周」的|| '-Q'|| to_char(sysdate,'Q')|| '-W'|| > to_char(sysdate,'w')作爲「當前時間」 from dual;

上面的查詢返回'2016-Q2-W3',因爲日期落在該月的第3周。

說SYSDATE是 '2016年6月17日' 我期待的結果

2016 Q2- W12

我周的範圍是(星期日 - 星期六)

自2016年6月17日起,該季度未滿12周,應爲W12。

在此先感謝。

+2

您當前的查詢可以簡化爲:'選擇TO_CHAR(SYSDATE, 'YYYY- 「Q」 Q- 「W」 W')從雙 「當前時間」;'' – MT0

+1

選擇TRUNC(SYSDATE,' Q')FROM DUAL'給出了'2016-04-01'這是一個星期五。 '2016-Q2-W1'從星期五到星期四運行嗎?還是星期一到星期天運行?或者是其他東西? – MT0

回答

2

這將讓本週(週日 - 週六)本季度:

SELECT TO_CHAR(SYSDATE, 'YYYY-"Q"Q-"W"') 
    || (7 + TRUNC(SYSDATE + 1, 'IW') - TRUNC(TRUNC(SYSDATE, 'Q') + 1, 'IW'))/7; 
     AS "Current Time" 
FROM DUAL 

說明

  • 您可以找到星期天這是可以打開也可以,只是,前使用NEXT_DAY(TRUNC(date_value), 'SUNDAY') - 7(取決於NLS_TERRITORY設置)或TRUNC(date_value + 1, 'IW') - 1(更短且不依賴於任何設置)的給定日期。
  • TRUNC(date_value, 'Q')給出了本季度第一天的日期,包含日期value(即1月1日,4月1日,7月1日或10月1日)。
  • 把兩者結合起來,在週日 - 或剛剛之前的季度的第一天被TRUNC(TRUNC(date_value, 'Q') + 1, 'IW') - 1
  • 因此,天週日之間的數給出接通或者剛剛之前的開始在指定日期之前的季度和星期日是:(TRUNC(date_value + 1, 'IW') - 1) - (TRUNC(TRUNC(date_value, 'Q') + 1, 'IW') - 1) - 可以通過取消-1條款來簡化。
  • 星期差數就是該數除以7(但給出0-索引值,並且您希望該季的星期數爲1索引;您可以爲結果添加1周,或者在做師,加7天)。
+0

說明請。 另外我預計2016年6月19日的'2016-Q2-W13'。您的解決方案將於6月23日發佈'W12'。 – Munesh

+0

'SELECT TRUNC(SYSDATE,'Q')FROM DUAL'給出'2016-04-01'這是一個星期五。 '2016-Q2-W1'從星期五到星期四運行嗎?還是星期一到星期天運行?或者是其他東西? – MT0

相關問題