2013-01-25 2 views
7

Verwenden von Oracle SQL, wie Sie ein Ergebnis erstelle Set für:Mit Oracle SQL, wie gibt man Tag Anzahl der Woche und Wochentag aus?

  • Zahl für den Tag der Woche (1-7)
  • Namen des Tages (Montag, Dienstag, Mittwoch, etc.)

Zum Beispiel:

 
DAY NAME 
1  Monday 
2  Tuesday 
3  Wednesday 
4  Thursday 
5  Friday 
6  Saturday 
7  Sunday 
+1

Dies war ursprünglich eine sehr schlecht formulierte Frage. Es wurde jedoch überarbeitet und geklärt und ist nun eine sehr nützliche Frage. Die Antworten auf dieser Seite waren mir eine große Hilfe bei der Vereinfachung eines (ursprünglich) schwierigen Oracle-Problems. Diese Antworten sind an anderer Stelle nicht verfügbar. Diese Frage verdient es, neu bewertet und möglicherweise wieder geöffnet zu werden. –

+0

Es ist jetzt eine echte Frage. –

Antwort

17

Florins Antwort ist, wie ich es tun würde, aber Sie müssen ein wenig vorsichtig mit NLS-Einstellungen sein. Der Tag der Woche wird durch die NLS Gebiet betroffen, also wenn ich diese laufen, als ob ich in den USA bin es funktioniert:

alter session set nls_territory = 'AMERICA'; 

select to_char(sysdate, 'D') as d, to_char(sysdate, 'Day') as day from dual; 

D DAY         
- ------------------------------------ 
6 Friday        

select level as dow, 
    to_char(trunc(sysdate ,'D') + level, 'Day') as day 
from dual 
connect by level <= 7; 

DOW DAY         
--- ------------------------------------ 
    1 Monday        
    2 Tuesday        
    3 Wednesday        
    4 Thursday        
    5 Friday        
    6 Saturday        
    7 Sunday        

Aber die gleiche Abfrage im Vereinigten Königreich ist ein freier Tag:

alter session set nls_territory = 'UNITED KINGDOM'; 

select to_char(sysdate, 'D') as d, to_char(sysdate, 'Day') as day from dual; 

D DAY         
- ------------------------------------ 
5 Friday        

select level as dow, 
    to_char(trunc(sysdate ,'D') + level, 'Day') as day 
from dual 
connect by level <= 7; 

DOW DAY         
--- ------------------------------------ 
    1 Tuesday        
    2 Wednesday        
    3 Thursday        
    4 Friday        
    5 Saturday        
    6 Sunday        
    7 Monday        

... und ich brauche die Berechnung einzustellen, um das zu korrigieren:

select level as dow, 
    to_char(trunc(sysdate ,'D') + level - 1, 'Day') as day 
from dual 
connect by level <= 7; 

DOW DAY         
--- ------------------------------------ 
    1 Monday        
    2 Tuesday        
    3 Wednesday        
    4 Thursday        
    5 Friday        
    6 Saturday        
    7 Sunday        

Sie können auch die Sprache für die Tagesnamen separat verwendet angeben, wenn Sie wollen:

select level as dow, 
    to_char(trunc(sysdate ,'day') + level - 1, 'Day', 
     'NLS_DATE_LANGUAGE=FRENCH') as day 
from dual 
connect by level <= 7; 

DOW DAY        
--- -------------------------------- 
    1 Lundi        
    2 Mardi        
    3 Mercredi       
    4 Jeudi        
    5 Vendredi       
    6 Samedi       
    7 Dimanche       

Dokumentation für to_char() with nls_date_language und day of the week und mehr in der globalisation support guide.

-1
Select 1, 'Monday' from dual union all select 2, 'Tuesday' from dual ... 
+0

Danke für die Antwort. Gibt es einen anderen Weg ohne UNION zu benutzen? –

3
select level as dow, 
    to_char(level+trunc(sysdate,'D'),'Day') as day 
from dual 
connect by level <= 7; 
Verwandte Themen