2016-08-01 10 views
0

Ich habe diese Abfrage verwendet, um die Wochennummer zu erhalten, aber die Ausgabe der ersten Woche falsch zu bekommen , aber eigentlich ist es eine zweite Woche August-2016.erhalten Woche Nummer mit Orakel Datum Funktion?

select 
     to_char(TO_DATE('07-08-2016','dd-mm- rrrr'), 'w') week , 
     to_char(TO_DATE('07-08-2016','dd-mm- rrrr'), 'd') day-no, 
     to_char(TO_DATE('07-08-2016','dd-mm- rrrr'), 'Day') Day 
     from dual 
+0

: 8 datum in der zweiten woche nicht 7 –

+0

Was denkst du als erster tag der woche? Überprüfen Sie Ihre NLS_TERRITORY Einstellungen. –

+0

Mögliches Duplikat von [So extrahieren Sie die Wochennummer in sql] (http://stackoverflow.com/questions/16530044/how-to-extract-week-number-in-sql) – Rene

Antwort

0

sorgfältig lesen:

W - Woche des Monats (1-5), in Woche 1 beginnt am am ersten Tag des Monats und die siebten auf endet.

WITH t AS (SELECT TO_DATE ('07-07-2016', 'dd-mm-rrrr') d FROM DUAL) 
SELECT TO_CHAR (d, 'w') week, 
     TO_CHAR (d, 'd') day_no, 
     TO_CHAR (d, 'Day') Day 
    FROM t 

WEEK DAY_NO DAY  
---- ------ ---------- 
1 5  Donnerstag 
1 row selected. 

Es ist möglich, es zu machen, wie Sie es wollen, unabhängig von NLS_TERRITORY:

WITH t AS (SELECT TO_DATE ('07-08-2016', 'dd-mm-rrrr') d FROM DUAL) 
SELECT trunc(TO_CHAR (d+1, 'j')/7)-trunc(TO_CHAR (trunc(trunc(d,'mm'),'IW')+1, 'j')/7)+1 week, 
     TO_CHAR (d, 'd') day_no, 
     TO_CHAR (d, 'Day') Day 
    FROM t 

     WEEK DAY_NO DAY  
---------- ------ ---------- 
     2 1  Sonntag 
1 row selected. 

aber es wird lustig sein, wenn der erste Tag des Monats ist Samstag. Sie werden die 6. Woche im Monat haben.

WITH t AS (SELECT TO_DATE ('30-11-2014', 'dd-mm-rrrr') d FROM DUAL) 
SELECT trunc(TO_CHAR (d+1, 'j')/7)-trunc(TO_CHAR (trunc(trunc(d,'mm'),'IW')+1, 'j')/7)+1 week, 
     TO_CHAR (d, 'd') day_no, 
     TO_CHAR (d, 'Day') Day 
    FROM t 

     WEEK DAY_NO DAY  
---------- ------ ---------- 
     6 1  Sonntag 
1 row selected.