使用Oracle SQL,如何使用其排名(1-7)获得工作日(星期一至星期日)?

时间:2018-10-16 15:06:17

标签: sql oracle

使用Oracle,这是我的问题:

我所拥有的:

1到7之间的数字。

我想要的:

1 =星期一,2 =星期二...

我到目前为止所做的事情:

DECODE(myVar,1,'Monday',2,'Tuesday',...)

我当然想过要编写一个函数,但是我想知道是否没有本机的方法。

编辑:由于似乎不清楚,我想要一种不使用DECODE或CASE的本地方法。

非常感谢。

4 个答案:

答案 0 :(得分:2)

您可以尝试将to_char函数与日期变量的data = pd.DataFrame({'date': ['1-12-2016', '1-23-2016', '2-23-2016', '2-1-2016', '3-4-2016'], 'EOM': ['1-31-2016', '1-31-2016', '2-28-2016', '2-28-2016', '3-31-2016'], 'country':['uk', 'usa', 'fr','fr','uk'], 'tr_code': [10, 21, 20, 10,12], 'TOTAL': [435, 367,891,1234,231] }) data['EOM'] = pd.to_datetime(data['EOM']) data['date'] = pd.to_datetime(data['date']) data_total = data.pivot_table(values='TOTAL', index=['country','tr_code'], columns='EOM') Out[73]: EOM 2016-01-31 2016-02-28 2016-03-31 country tr_code fr 10 NaN 1234.0 NaN 20 NaN 891.0 NaN uk 10 435.0 NaN NaN 12 NaN NaN 231.0 usa 21 367.0 NaN NaN media="print"参数一起使用,如下所示:

Day

例如,如果用D代替SQL> var day_nr number; SQL> exec :day_nr := 1; PL/SQL procedure successfully completed day_nr --------- 1 SQL> alter session set NLS_TERRITORY="UNITED KINGDOM"; SQL> with t(day,day_nr) as 2 ( 3 select to_char(level + sysdate,'Day','NLS_DATE_LANGUAGE=ENGLISH'), 4 to_char(level + sysdate,'D') 5 from dual 6 connect by level <= 7 7 ) 8 select day 9 from t 10 where day_nr = :day_nr; DAY --------- Monday ,则会得到1等。

Rextester Demo

P.S。感谢@Matthew McPeak,我意识到:day_nr的返回值可能与TERRITORY不同,例如,Monday参数是设置为“ UNITED KINGDOM”还是“ AMERICAN_AMERICA”都不同。 < / p>

答案 1 :(得分:1)

以下公式将产生您想要的:

SELECT TO_CHAR(TRUNC(SYSDATE, 'IW') +
               (CAST(TO_CHAR(TRUNC(SYSDATE, 'IW'), 'D') AS NUMBER) +
               :DAY_OF_WEEK - 3), 'Day')
  FROM DUAL

要使用,请将:DAY_OF_WEEK参数替换为所需的任何值,它将返回星期几。

答案 2 :(得分:0)

TO_DATE具有format_mask,可让您从星期几开始创建日期。然后,您可以从中获取工作日名称。但是,它需要一个字符串输入。

答案 3 :(得分:0)

这无疑可以正常工作,就像您要求的函数没有解码或大小写一样:

declare
a varchar(20);
b varchar(20);
c varchar(20);
d varchar(20);
e varchar(20);
f varchar(20);
g varchar(20);
h varchar(20);
i number;
begin
i:=&i;
SELECT COALESCE((select 'null' from dual where i<>1),'MONDAY')into a from dual;
SELECT COALESCE((select 'null' from dual where i<>2),'TUEDAY')into b from dual;
SELECT COALESCE((select 'null' from dual where i<>3),'WEDNESDAY') into c from dual;
SELECT COALESCE((select 'null' from dual where i<>4),'THURDAY') into d from dual;
SELECT COALESCE((select 'null' from dual where i<>5),'FRIDAY')into e from dual;
SELECT COALESCE((select 'null' from dual where i<>6),'SATURDAY')into f from dual;
SELECT COALESCE((select 'null' from dual where i<>7),'SUNDAY')into g from dual;

DBMS_OUTPUT.PUT_LINE(a||b||c||d||e||f||g);

end;
/

对于4个输出的输入是:

null  null null  THURDAY  null null null