最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Kim Berg Hansen
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我有一张表保存着一本书的章节标题:
create table plch_chapters (
ch# integer primary key
, title varchar2(30)
)
/
insert into plch_chapters values (1, 'Aggregation')
/
insert into plch_chapters values (2, 'Analytic Functions')
/
insert into plch_chapters values (3, 'Model Clause')
/
insert into plch_chapters values (4, 'Row Pattern Matching')
/
commit
/
我想要创建一个内容列表,把章节数标记成罗马数字。
为了使得章节名称正确对齐,罗马数字必须向右对齐,后面跟着一个句号和一个空格,然后是章节标题。
根据定义,章节数不会超过25,所以可能最长的罗马数字会是五个字符(XVIII 和 XXIII),所以为了向右对齐,数字必须在左边补齐至五个字符。
为了得到这个内容表我有如下未完成的查询:
select ##REPLACE##
as table_of_contents
from plch_chapters
order by ch#
/
哪些选项包含了一个表达式可用来取代##REPLACE##使得查询返回这个输出:
TABLE_OF_CONTENTS
-------------------------------------
I. Aggregation
II. Analytic Functions
III. Model Clause
IV. Row Pattern Matching
(主意罗马数字向左补齐长度为5,所以句号永远是字符串的第六个字符)
(A)
to_char(ch#, 'RN') || '. ' || title
(B)
lpad(ltrim(to_char(ch#, 'RN')), 5) || '. ' || title
(C)
lpad(to_char(ch#, 'FMRN'), 5) || '. ' || title
(D)
to_char(ch#, 'RN5') || '. ' || title
(E)
lpad(
to_char(ch#, 'FMRN') || '. ' || title
, length(title) + 7
)
(F)
lpad(
to_char(ch#, 'FMRN ". ' || title ||'"')
, length(title) + 7
)
(G)
substr(
to_char(ch#, 'RN') || '. ' || title
, -(length(title) + 7)
)
(H)
substr(
to_char(ch#, 'RN')
, -5
) || '. ' || title
(I)
substr(
to_char(ch#, 'RN') || '. ' || title
, length(to_char(1, 'RN')) - 5 + 1
)
(J)
substr(
to_char(ch#, 'RN')
, length(to_char(1, 'RN')) - 5 + 1
) || '. ' || title
|