|
|
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者: Kim Berg Hansen
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我有一张发票表:
create table qz_invoices (
id integer primary key
, inv_date date
, customer varchar2(20)
, amount number
)
/
-- For implicit conversion in INSERT and output format in choices
alter session set nls_date_format = 'YYYY-MM-DD'
/
insert into qz_invoices values (41, '2018-01-30', 'Andys Pub', 299)
/
insert into qz_invoices values (42, '2018-02-28', 'Ajax Inc' , 299)
/
insert into qz_invoices values (43, '2018-03-01', 'Acme Corp', 149)
/
insert into qz_invoices values (44, '2018-04-03', 'Adams Bar', 442)
/
commit
/
支付条款是发票必须在发票日期当月的最后一天支付。
这当然会使得一些人的信用额度比其他人更长,可能有点不公平。因此,为了获取这个情况,我想要一张发票清单,显示每张发票有多少天的信用额度。换句话说,从发票日期到付款日期(该月的最后一天)的天数。
为了做这个清单,我写了这个未完成的查询:
select id
, inv_date
, ##REPLACE##
as credit_days
, customer
, amount
from qz_invoices
order by id
/
哪些选项包含了一个列别名为CREDIT_DAYS的表达式,可以用来取代 ##REPLACE## 使得查询返回非个所需的输出:
ID INV_DATE CREDIT_DAYS CUSTOMER AMOUNT
---------- ---------- ----------- -------------------- ----------
41 2018-01-30 1 Andys Pub 299
42 2018-02-28 0 Ajax Inc 299
43 2018-03-01 30 Acme Corp 149
44 2018-04-03 27 Adams Bar 442
(A)
last_day(inv_date) - inv_date
(B)
trunc(add_months(inv_date, 1), 'MM') - 1 - inv_date
(C)
add_months(trunc(inv_date, 'MM'), 1) - 1 - inv_date
(D)
trunc(inv_date + interval '1' month, 'MM')
- interval '1' day - inv_date
(E)
trunc(inv_date, 'MM') + interval '1' month
- interval '1' day - inv_date
(F)
31 - extract(day from inv_date)
(G)
extract(day from last_day(inv_date))
- extract(day from inv_date)
|
|