本帖最后由 newkid 于 2022-2-15 00:04 编辑
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... =typeid&typeid=1808
原始出处:
https://devgym.oracle.com/
作者:Kim Berg Hansen
运行环境:SQLPLUS, SERVEROUTPUT已打开, 最低版本要求:11.2
注:本题给出答案时候要求给予简要说明才能得到奖品
我有一张顾客表,里面有一个LOCALE,包含两位字符的ISO语言以及一个两位字符的地区代码。我还有一张订单表,保存着顾客的预期投递日期:
create table qz_customers (
id
integer primary key
, namevarchar2(20)
, localevarchar2(10)
);
create table qz_orders (
id
integer primary key
, customerreferences qz_customers
, shipmentdate
, description varchar2(20)
);
insert into qz_customers values (142, 'Cafe Saint-Henri', 'fr_CA');
insert into qz_customers values (261, 'Den Gamle Kaffebar', 'da_DK');
insert into qz_customers values (337, 'Kaffee Alt Wien' , 'de_AT');
insert into qz_customers values (450, 'Einstein Kaffee' , 'de_DE');
insert into qz_orders values (1002, 450, date '2022-03-01', 'Blue Mountain');
insert into qz_orders values (1003, 337, date '2022-03-04', 'Kona Peaberry');
insert into qz_orders values (1004, 261, date '2022-03-08', 'Sumatra Mandheling');
insert into qz_orders values (1005, 142, date '2022-03-11', 'Valhalla Java');
commit;
我想要一个顾客列表,带有订单投递日期,根据顾客的所在地以正确的语言显式月份的全名。
为此我写了这个未完成的查询:
select
c.name
, to_char(
d.shipment
, 'FMDD. Month YYYY'
, ##REPLACE##
) as shipment
, description
from qz_customers c
join qz_orders d
on d.customer = c.id
order by d.id;
哪些选项包含了一个表达式可以用来取代##REPLACE##,作为TO_CHAR的第三个参数,使得查询可以执行不出错并且产生这个所需的输出:
NAME
SHIPMENT
DESCRIPTION
-------------------- -------------------- --------------------
Einstein Kaffee1. M?rz 2022 Blue Mountain
Kaffee Alt Wien4. M?rz 2022 Kona Peaberry
Den Gamle Kaffebar 8. Marts 2022Sumatra Mandheling
Cafe Saint-Henri 11. Mars 2022Valhalla Java
注意:这个输出包含了普通题目假定之外的字符。这是意料之中的,不是错误。
(A)
'NLS_DATE_LANGUAGE=''' || utl_i18n.map_language_from_iso(c.locale) || ''''
(B)
'NLS_DATE_LANGUAGE=' || utl_i18n.map_language_from_iso(c.locale)
(C)
'NLS_DATE_LANGUAGE=''' || utl_i18n.map_language_from_iso(substr(c.locale, 1, 2)) || ''''
(D)
'NLS_DATE_LANGUAGE=''' || utl_i18n.map_language_from_iso(substr(c.locale, 4, 2)) || ''''
(E)
'NLS_DATE_LANGUAGE=''' || substr(c.locale, 1, 2) || ''''
(F)
'NLS_DATE_LANGUAGE=''' || utl_i18n.map_from_short_language(substr(c.locale, 1, 2)) || ''''
(G)
'NLS_DATE_LANGUAGE=''' || utl_i18n.map_from_short_language(substr(c.locale, 4, 2)) || ''''
(H)
'NLS_DATE_LANGUAGE=''' || utl_i18n.map_from_short_language(
case locale
when 'fr_CA' then 'FRC'
when 'da_DK' then 'DK'
when 'de_AT' then 'D'
when 'de_DE' then 'D'
end
) || ''''
|