PL/SQL Challenge 每日一题:2016-5-30 TO_CHAR函数

[复制链接]
查看11 | 回复9 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
(原发表于 2011-3-31)
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:
JeffKemp
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
假设日期格式被设置为英语:
ALTER SESSION SET NLS_DATE_LANGUAGE=american;
在下列代码块执行之后会显示什么?
DECLARE
d1 DATE := TO_DATE ('09/2011', 'MM/YYYY');
d2 DATE := TO_DATE ('10/2011', 'MM/YYYY');
v1 VARCHAR2 (10);
v2 VARCHAR2 (10);
BEGIN
v1 := TO_CHAR (d1, 'Month');
v2 := TO_CHAR (d2, 'Month');
DBMS_OUTPUT.put_line (
CASE
WHEN v1 = 'Sep' AND v2 = 'Oct' THEN 'Short and Sweet'
WHEN v1 = 'September' AND v2 = 'October' THEN 'Long and Sour'
ELSE 'Not Short and Not Long'
END);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Something else entirely');
END;
(A)
Short and Sweet
(B)
Long and Sour
(C)
Not Short and Not Long
(D)
Something else entirely


回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
就是缩写和全名,不过中文就不分了
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
C
to_char(sysdate, 'Month') 的结果是 '6月 ' ,月后面还有一个空格;
这样一来, C是正确答案;
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
OO真早。。。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
选择C
D1 D2分别返回01-SEP-11 01-OCT-11,
V1 V2通过to_char返回的字符的长度都是九,September是九个字符,满足条件,但是October只有七个字符,不满足条件,所以输出ot Short and Not Long,如果October后面补上两个空格,那样就满足了and后面的条件,结果就会输出Long and Sour。

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
佚名是译名 发表于 2016-6-2 10:07
选择C
D1 D2分别返回01-SEP-11 01-OCT-11,
V1 V2通过to_char返回的字符的长度都是九,September是九个字 ...

又是格式问题
SQL> select length(TO_CHAR( TO_DATE ('10/2011', 'MM/YYYY'),'Month')) from dual;
LENGTH(TO_CHAR(TO_DATE('10/2011','MM/YYYY'),'MONTH'))
-----------------------------------------------------

9
已用时间:00: 00: 00.00
SQL> select length(TO_CHAR( TO_DATE ('10/2011', 'MM/YYYY'),'fmMonth')) from dual;
LENGTH(TO_CHAR(TO_DATE('10/2011','MM/YYYY'),'FMMONTH'))
-------------------------------------------------------

7
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层


2016-06-02_105617.png (1.38 KB, 下载次数: 1)
下载附件
2016-6-2 10:54 上传

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
col x for a20
select '|'||TO_CHAR( TO_DATE ('10/2011', 'MM/YYYY'),'Month')||'|' x from dual
union select '|'||TO_CHAR( TO_DATE ('10/2011', 'MM/YYYY'),'fmMonth')||'|' from dual;
才看得出来

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
中文都是4字符
SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='simplified chinese';
会话已更改。
已用时间:00: 00: 00.00
SQL> col x for a20
SQL> select '|'||TO_CHAR( TO_DATE ('10/2011', 'MM/YYYY'),'Month')||'|' x from dual
2union select '|'||TO_CHAR( TO_DATE ('10/2011', 'MM/YYYY'),'fmMonth')||'|' from dual;
X
--------------------
|10月|
已用时间:00: 00: 00.00
SQL> select '|'||TO_CHAR( TO_DATE ('9/2011', 'MM/YYYY'),'Month')||'|' x from dual
2union select '|'||TO_CHAR( TO_DATE ('9/2011', 'MM/YYYY'),'fmMonth')||'|' from dual;
X
--------------------
|9月 |
|9月|

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
恭喜!您刚拣到ITPUB送出的 处女座
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行