0
点赞
收藏
分享

微信扫一扫

Oracle格式化数字和日期的方法


to_char,函数功能,就是将数值型或者日期型转化为字符型。

比如最简单的应用:


/*1.0123--->'1.0123'*/ 
 
Select  
 TO_CHAR(1.0123)  
 FROM  
 DUAL 
 
/*123--->'123'*/ 
 
Select  
 TO_CHAR(123)  
 FROM  
 DUAL


 接下来再看看下面:


/*0.123 ---> '.123' */ 
 
 SELEC  
 TO_CHAR(0.123)  
 FROM  
 DUAL


 上面的结果 '.123' 在大多数情况下都不是我们想要的结果,我们想要的应该是 '0.123'。

我们来看一下to_char函数的具体用法:


TO_CHAR ( n [, fmt [, 'nlsparam']] )


'nlsparams'指定由数值格式的元素返回的字符,包括:

.小数点字符

.组分隔符

.本地钱币符号

.国际钱币符号

变元的形式为:

'NLS_NUMERIC_CHARACTERS="dg" NLS_CURRENCY="tcxt" NLS_ISO_CURRENCY=territory'

其中d为小数点字符,g为组分隔符。

例 :TO_CHAR (17145, 'L099G999', 'NLS_NUMERIC_CHARACTERS=".," NLS_CURRENCY="NUD"')=NUD017,145


通过上面的了解,再查看fmt的一些格式,我们可以用以下表达式得到'0.123'的值:

/*0.123 ---> ' 0.123' */  
 
Select  
 TO_CHAR(0.123, 
 '0.999')  
 FROM  
 DUAL 
 
/*100.12 ---> '######' */  
 
Select  
 TO_CHAR(100.12, 
 '0.999')  
 FROM  
 DUAL 
 
/*1.12 ---> ' 1.120' */  
 
Select  
 TO_CHAR(1.12, 
 '0.999')  
 FROM  
 DUAL


 ' 0.123'是出来了,可是前面又多了一个空格。

对于 100.12 的值却是######,以及'1.12'的值变成了 '1.120'。

我们重新确定一个新的需求:

1、去空格

2、小数点最多4位,最少保留2位。

    1--->'1.00';1.1--->'1.00';1.12-->'1.12';1.1234--->'1.1234';

    1.12345--->'1.1235'

最终实现如下:


/*
  FM :除空格  
  9999999.0099:允许小数点左边最大正数为7位,小数点右边最少2位,最多4位,且在第5位进行四舍五入
*/ 
Select  TO_CHAR(123.0233, 'FM9999999.0099')  FROM  DUAL


 

===========

http://www.5ienet.com/note/html/numdate/oracle-number-format.shtml

二、 数值

格式串 说明及示例

---------- -----------------------------------------------------------

, 在指定位置附加逗号(便于阅读),注意逗号不能出现于格式字串首位,并且对于小数点的数字无效


  • 例如:
    SQL> select to_char(389999.00,¨99,999,999¨) from dual;
    TO_CHAR(389
    -----------


. 按指定格式显示小数点及小数点后位置(指定数字没有小数的话,以0补足)


  • 例如:
    SQL> select to_char(18,¨999.000¨) from dual;
    TO_CHAR(
    --------


$ 字符前附加$符


  • 例如:
    SQL> select to_char(18,¨$999¨) from dual;
    TO_CH
    -----
    $18
    SQL> select to_char(18,¨999$¨) from dual;
    TO_CH
    -----


0 字符头部或尾部附加0


  • 例如:
    SQL> select to_char(18.0,¨0999¨) from dual;
    TO_CH
    -----


9 与上类似以指定长度返回数值格式,不过如果被格式化的数值长度短于指定格式,则以空格补足。


  • 例如:
    SQL> select to_char(18.0,¨9999¨) from dual;
    TO_CH
    -----


B 当整数部分是0时返回空格(即使存在0格式串也忽略)。


  • 例如:
    SQL> select to_char(0.18,¨B0999¨) from dual;
    TO_CH


C 返回ISO默认指定的标识(默认标识可参见:NLS_ISO_CURRENCY)


  • 例如:
    SQL> select to_char(128.18,¨C999999.99¨) from dual;
    TO_CHAR(128.18,¨C
    -----------------


D 返回指定的小数点形式(默认符:.)(默认标识可参见:NLS_NUMERIC_CHARACTER)


  • 例如:
    SQL> select to_char(128.18,¨9999D99¨) from dual;
    TO_CHAR(
    --------
    128.18
    SQL> alter session set nls_numeric_characters=¨:"¨;
    会话已更改。
    SQL> select to_char(128.18,¨9999D99¨) from dual;
    TO_CHAR(
    --------


EEEE 使用科学记数法显示


  • 例如:
    SQL> select to_char(128.18,¨9EEEE¨) from dual;
    TO_CHAR
    -------


G 与逗号功能类似,用指定字符分隔字串(默认符:,)(默认标识可参见:NLS_NUMERIC_CHARACTER)。


  • 例如:
    SQL> select to_char(11128.18,¨99G999¨) from dual;
    TO_CHAR
    -------
    11,128
    SQL> alter session set nls_numeric_characters=¨:"¨;
    会话已更改。
    SQL> select to_char(11128.18,¨99G999¨) from dual;
    TO_CHAR
    -------


L 指定位置显示本地默认符号(默认值见:NLS_CURRENCY)


  • 例如:
    SQL> select to_char(999,¨L999¨) from dual;
    TO_CHAR(999,¨L
    --------------
    ¥999
    SQL> alter session set nls_currency=¨haha¨;
    会话已更改。
    SQL> select to_char(999,¨L999¨) from dual;
    TO_CHAR(999,¨L
    --------------


MI 负值在尾部显示-号,正值在尾部附加空格。另:该格式符必须处于格式串尾部


  • 例如:
    SQL> select to_char(-18,¨999MI¨) from dual;
    TO_C
    ----
    18-
    SQL> select to_char(18,¨999MI¨) from dual;
    TO_C
    ----


PR 负值以<>尖括号包括,正值在头尾部各附加空格。另:该格式符必须处于格式串尾部


  • 例如:
    SQL> select to_char(-18,¨999PR¨) from dual;
    TO_CH
    -----
    <18>
    SQL> select to_char(18,¨999PR¨) from dual;
    TO_CH
    -----


RN/rn 返回罗马数字形式。注:大写格式串返回大写罗马数字,小写格式串返回小写罗马数字:)


  • 例如:
    SQL> select to_char(18,¨RN¨) from dual;
    TO_CHAR(18,¨RN¨
    ---------------
    XVIII
    SQL> select to_char(18,¨rn¨) from dual;
    TO_CHAR(18,¨RN¨
    ---------------


S 显示数值正负值符号。可出现于格式串首部或尾部。


  • 例如:
    SQL> select to_char(18,¨S9999¨) from dual;
    TO_CH
    -----
    +18
    SQL> select to_char(18,¨9999S¨) from dual;
    TO_CH
    -----


TM 字符格式转换(标准数值与科学计数法),可以通过附加9或e控制输出,默认是tm9,如果输出超过64个字符,则数据库自动转换成科学计数法显示。该格式串不能与其它的数值型格式串同时使用。


  • 例如:
    SQL> select TO_CHAR(128,¨tme¨) from dual;
    TO_CHAR(128,¨TME¨)
    ----------------------------------------------------------------
    1.28E+02
    SQL> select TO_CHAR(1.28E+02,¨tm¨) from dual;
    TO_CHAR(1.28E+02,¨TM¨)
    ----------------------------------------------------------------


U 与L类似,在指定位置显示货币单位(默认值见:NLS_DUAL_CURRENCY)


  • 例如:
    SQL> select TO_CHAR(128,¨999U¨) from dual;
    TO_CHAR(128,¨9
    --------------
    128 ¥
    SQL> alter session set nls_dual_currency=¨aaa¨;
    会话已更改。
    SQL> select TO_CHAR(128,¨999U¨) from dual;
    TO_CHAR(128,¨9
    --------------


V 数值+10的n次方,n=V后9的个数


  • 例如:
    SQL> select TO_CHAR(128,¨999V999¨) from dual;
    TO_CHAR
    -------


X 返回指定数值对应的16进制数,必须是正数。如果指定数值非整的话,oracle会自动round取整。

例如:

SQL> select TO_CHAR(16,¨XXXX¨) from dual;

TO_CH

-----

举报

相关推荐

0 条评论