2013-01-25 48 views
7

Sử dụng Oracle SQL, làm thế nào để bạn tạo ra một kết quả thiết lập cho:Sử dụng Oracle SQL, làm cách nào để xuất số ngày trong tuần và ngày trong tuần?

  • Số cho ngày trong tuần (1-7)
  • Tên của ngày (Thứ Hai, Thứ Ba, Thứ Tư, vv)

Ví dụ:

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

Đây ban đầu là một câu hỏi rất kém. Tuy nhiên, nó đã được chỉnh sửa và làm rõ và bây giờ là một câu hỏi rất hữu ích. Các câu trả lời trên trang này đã giúp tôi rất nhiều với việc đơn giản hóa một vấn đề Oracle (ban đầu) khó khăn. Những câu trả lời này không có sẵn ở nơi khác. Câu hỏi này xứng đáng được đánh giá lại và có thể mở cửa trở lại. –

+0

Đó là một câu hỏi thực sự ngay bây giờ. –

Trả lời

17

Câu trả lời của Florin là tôi sẽ làm như thế nào, nhưng bạn cần phải cẩn thận một chút về cài đặt NLS. Các ngày trong tuần bị ảnh hưởng bởi các lãnh thổ NLS, vì vậy nếu tôi chạy như thể tôi đang ở Mỹ hoạt động:

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        

Nhưng chạy cùng một truy vấn ở Anh là một ngày off:

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        

... và tôi cần phải điều chỉnh tính toán để điều chỉnh cho rằng:

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        

bạn cũng có thể chỉ định ngôn ngữ sử dụng cho tên ngày riêng biệt nếu bạn muốn:

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       

Tài liệu cho to_char() with nls_date_languageday of the week và hơn thế nữa trong globalisation support guide.

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

Cảm ơn bạn đã trả lời. Có cách nào khác mà không sử dụng UNION. –

3
select level as dow, 
    to_char(level+trunc(sysdate,'D'),'Day') as day 
from dual 
connect by level <= 7; 
Các vấn đề liên quan