oracle 每日一题-数字格式化模型

转自http://www.itpub.net/home.php?mod=space&uid=86208&do=thread&view=me&type=thread&order=dateline&from=space&page=1 感谢newkid

原始出处:
http://www.plsqlchallenge.com/

作者:Steven Feuerstein 

运行环境:SQLPLUS, SERVEROUTPUT已打开

股票交易的标准单位是100股,有时候股票的销售报表是以100股作售出单位的。因此,一个销售数字123实际上代表着123个100股的销售单位,即12,300股。

哪些选项实现了一个过程,使得下列代码块执行之后会显示"12,300" ?

BEGIN
   plch_show_stocks_sold (123);
END;
/

(A) 
CREATE OR REPLACE PROCEDURE plch_show_stocks_sold (units_in IN INTEGER)
IS
BEGIN
   DBMS_OUTPUT.put_line (TO_CHAR (units_in, 'FM999G9V99'));
END;
/

(B) 
CREATE OR REPLACE PROCEDURE plch_show_stocks_sold (units_in IN INTEGER)
IS
BEGIN
   DBMS_OUTPUT.put_line (TO_CHAR (units_in * 100, 'FM999G999'));
END;
/

(C) 
CREATE OR REPLACE PROCEDURE plch_show_stocks_sold (units_in IN INTEGER)
IS
BEGIN
   DBMS_OUTPUT.put_line (TO_CHAR (units_in * 100, 'FM999999'));
END;
/

(D) 
CREATE OR REPLACE PROCEDURE plch_show_stocks_sold (units_in IN INTEGER)
IS
BEGIN
   DBMS_OUTPUT.put_line (TO_CHAR (units_in, 'FM999G999'));
END;
/

A: 这个选项正确使用了G和V格式元素来输出所需的字符串。我们最感兴趣的是V元素,它返回了一个10的n倍的值,n是由V后面的9的个数确定的。
B: 这个选项没有使用V元素这种“花哨”的方法。它仅仅是把值乘以100,然后用G元素来确保字符串的恰当位置会出现一个","
C: 这个选项会显示"12300" ——没有逗号。但是题目要求有逗号,所以这个选项不正确。
D: 这个选项没有乘以100或者用V元素,所以它仅仅显示"123"


V

999V99

Returns a value multiplied by 10n (and if necessary, round it up), where n is the number of 9's after the V.

V后面n个9 X*10^n
G

9G999

Returns in the specified position the group separator (the current value of the NLS_NUMERIC_CHARACTER parameter). You can specify multiple group separators in a number format model.

Restriction: A group separator cannot appear to the right of a decimal character or period in a number format model.

99999里里面的G用,代替


这些例子应该能说明了。

select TO_CHAR (10000, 'FM9g9999g') from dual
union all
select TO_CHAR (10000, 'FM9g99g') from dual
union all
select TO_CHAR (10000, 'FM9g9999999g999999') from dual
union all
select TO_CHAR (10000, 'FM9g9999999g999') from dual
union all
select TO_CHAR (10000, 'FM9g99g99999g99g9') from dual
union all
select TO_CHAR (10000, 'FM9g99gv99') from dual
union all
select TO_CHAR (10000, 'FM9g9999gv99') from dual



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值