使用Oracle,这是我的问题:
我所拥有的:
1到7之间的数字。
我想要的:
1 =星期一,2 =星期二...
我到目前为止所做的事情:
DECODE(myVar,1,'Monday',2,'Tuesday',...)
我当然想过要编写一个函数,但是我想知道是否没有本机的方法。
编辑:由于似乎不清楚,我想要一种不使用DECODE或CASE的本地方法。
非常感谢。
答案 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
等。
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