2015-05-22 337 views
-1

請幫助從給定日期推導出oracle中給定week_no的第一天。在oracle中獲得給定週數的第一天

+0

什麼是你的數據和你嘗試過什麼? –

+0

爲什麼downvotes。這是一個非常明確而且很好的問題。 輸入:每週的數量。輸出。那周的第一天。 – Rene

+0

請指定您認爲是一週中的第一天。那是星期天,還是星期一或其他?在Oracle中也有幾個星期數字的定義。請看看這個問題: http://stackoverflow.com/questions/16530044/how-to-extract-week-number-in-sql – Rene

回答

2

你可以試試下面的查詢: -

SELECT NEXT_DAY(MAX(d), 'SUN') REQUESTED_SUN 
FROM (SELECT TO_DATE('01-01-2015', 'DD-MM-YYYY') + (ROWNUM-1) d FROM DUAL CONNECT BY LEVEL <= 366) 
WHERE TO_CHAR(d, 'WW') = Your_Desired_WEEK_NO-1; 

這可能會對你有所幫助。

2

使用此查詢

Select TRUNC (Trunc(sysdate,'yyyy')+(:num-1)*7,'IW') from duaL; 

:num是2015年,你需要的不是什麼SYSDATE一週的數量,或者把一年。

+0

這並不總是正確的:'選擇TO_CHAR(TRUNC(Trunc(DATE'2012-01-01','yyyy')+(1-1)* 7,'IW'),'YYYY-IW')from duaL ;'返回2011-52'而不是'2012-01'。 – MT0

+0

從duaL中選擇TRUNC(Trunc(DATE'2012-01-01','yyyy')+(1-1)* 7,'IW');返回26/12/2011,這是01.01.2012第一週的第一天實際發生的第一週 –

+0

是 - 但不是2012年第一個ISO周的週一。第一個ISO周是包含第一個4月的一週。如果您使用的是非標準定義,您可能需要指定如何定義第一週。 – MT0

2

您可以使用此功能來獲得ISO周的日期:

CREATE FUNCTION TO_ISO_WEEK_DATE(
    week NUMBER, 
    year NUMBER 
) RETURN DATE DETERMINISTIC 
IS 
BEGIN 
    RETURN NEXT_DAY(
      TO_DATE(TO_CHAR(year, '0000') || '0104', 'YYYYMMDD') 
      - INTERVAL '7' DAY, 'MONDAY' 
     ) 
     + (week - 1) * 7; 
END TO_ISO_WEEK_DATE; 
/
相關問題