Câu trả lời của Florin là cách tôi thực hiện, nhưng bạn cần phải cẩn thận một chút về cài đặt NLS. Ngày trong tuần bị ảnh hưởng bởi lãnh thổ NLS, vì vậy nếu tôi chạy điều này như thể tôi đang ở Hoa Kỳ, thì nó 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 truy vấn tương tự chạy ở Vương quốc Anh là một ngày nghỉ:
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 điều chỉnh phép tính để phù hợp với điều đó:
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 riêng ngôn ngữ được sử dụng cho tên ngày 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()
với nls_date_language
và ngày trong tuần, v.v. trong hướng dẫn hỗ trợ toàn cầu hóa.