使用Oracle SQL,如何输出一周中的天数和一周中的天数?

使用Oracle SQL,如何输出一周中的天数和一周中的天数?,sql,oracle,Sql,Oracle,使用Oracle SQL,如何为以下内容创建结果集: 星期一的编号1-7 星期一、星期二、星期三等的日期。 例如: DAY NAME 1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 Saturday 7 Sunday Florin的回答是我会怎么做,但你需要对设置有点谨慎。一周中的哪一天受NLS地区的影响,因此如果我像在美国一样运行此程序,它会起作用: alter session

使用Oracle SQL,如何为以下内容创建结果集:

星期一的编号1-7 星期一、星期二、星期三等的日期。 例如:

DAY NAME 1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 Saturday 7 Sunday
Florin的回答是我会怎么做,但你需要对设置有点谨慎。一周中的哪一天受NLS地区的影响,因此如果我像在美国一样运行此程序,它会起作用:

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
但在英国运行相同的查询需要休息一天:

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
。。。我需要调整计算,以纠正这一点:

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
如果需要,还可以单独指定日期名称使用的语言:

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
不带alter会话的。

中的和等文档

 CASE 
    WHEN to_char(sysdate, 'd')-1 = 0 THEN 7 
    ELSE to_char(sysdate, 'd')-1 
 END 

谢谢你的回复。有没有其他不使用联合的方法呢?这本来是一个措辞非常拙劣的问题。然而,它已经被编辑和澄清,现在是一个非常有用的问题。这一页上的答案对我简化原本很难解决的Oracle问题有很大帮助。其他地方没有这些答案。这个问题值得重新评估并可能重新讨论。现在这是一个真正的问题。这个问题对我来说似乎很有用,比如“charvdate”,“DAY”,“NLS\u DATE\u LANGUAGE=numeric DATE LANGUAGE'@TecHunter-我认为除了Fusion,它仍然没有被记录,奇怪的是,我会小心在生产代码中使用它。
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
 CASE 
    WHEN to_char(sysdate, 'd')-1 = 0 THEN 7 
    ELSE to_char(sysdate, 'd')-1 
 END