Oracle TO_CHAR的使用

Oracle TO_CHAR的使用

一 、TO_CHAR(NUMBER)
 

本函数把参数N转为一个VARCHAR2类型的数值。N可以是NUMBER,BINARY_FLOAT,或者BINARY_DOUBLE。如果不带格式,那么函数会把N转换为足以表示N的VARCHAR2字符串。

1、 ,(逗号) '9999,999' 逗号

一般以千分位出现,作为分组符号使用.如果需要您也可以当作是十分位,百分位出现,可以出现N次,视乎数字的大小而定.

注意事项:只能出现在整数部分.
 

2、 .(点号) '99.99' 点号

不要念为"句号",句号是个圆圈,点好只能出现在小数点对应的地方.只能出现一次.

注意事项:只能出现在一个地方,就是原来数据小数点位置
 

3 、$(美元符号) '$999.99' 美元

注意事项:只能出现一次.
 

4、 0(零) '0999.99'

零.在对应位置返回对应的字符,如果没有则以'0'填充.

to_char(0.34,'9,9,9,0.$99')='$0.34';

 to_char(1234,'9999.00')='1234.00';

注意事项:这是一个强制的符号,对应位没有,则以'o'填充,这是9很大不同地方
 

5 、9 '999.99'

9.在小数位,则表示转换为对应字符,如果没有则以0表示;在整数位,没有对应则不填充字符.

to_char(123,'999.99')=123.00;

TO_CHAR(123,'99999.9')=123.0;

注意事项:对于0和9而言,如果格式的位数不如数字的位数多,会返回'#'.
 

譬如to_char(12345,'9999')='#####'

6、B(空格符) 'B999' 没有其它特别作用,在整数部分最前面加一个空格,可以出现在任意位置.


 注意事项:只能出现在整数部位.

7、 C(国际货币符号) 'C9999' 在特定的位置返回一个ISO货币符号(就是NLS_ISO_CURRENCY参数所代表的值)

TO_CHAR(1233,'C9999')='CNY1234' ,这是新的国际标准RMB,关于这个可查询"国际货币符号"

注意事项:只能出现在整数部位第一位.
 

8 、D(ISO 小数位符号) '999D99'

这是"点号"的国际版本(ISO),作用等同于点号,也是只能出现一次.所不同的是,数据库会根据NLS_NUMERIC_CHARACTER的参数值来设置内容.默认的这个值是点号.

注意事项:没有特别需要一般不要用这个格式符号.也不要轻易修改参数值.
 

9、EEEE(科学计算符) 9.9EEEE 科学计算符号

TO_CHAR(2008032001,'9.9EEEE')='2.01E+09',

由于是科学计算方法,所以小数位前面加一个9或者0即可,多个是没有意义的.



10 、G(分组符号) 999G999 是逗号(,)的的ISO标准,作为分组符号使用,可以放在多个地方使用.

TO_CHAR(123456,'999G9G99')=123,4,56

注意事项:同第八项 -D, 此外如果要转换出小数点,则要和D配合使用,不能和点号配合.

 


11、 L(本地货币符号) 'L999' 是C的本地版本.可以放在整个格式的最前面和最后面.

TO_CHAR(123456,'999G9G99D00L')=123,4,56.00¥

 

12、 MI(负号) '9999MI'

如果是负数,在尾部加上负号(-),如果是正数,则尾巴加上空格


注意事项:只能放在格式尾部

13 、PR(符号) 9999PR 是表达负数的另外一种方式.如果是正数,则头部加上空格;如果是负数,则用小简括号<>把数字包起来.

TO_CHAR(-1234.89,'9G999D00PR')=<1,234.89>
 

14、 RN(rn) RN(rn) 把整数(1-3999)转换为罗马字符.RN表示转为大写,rn表示小写的.
 

注意事项:只能自己使用,不能和其它符号组合使用.
 

15、 S '9999S' 是12,13的综合改进版本.为整数加一个正号+,为负数加一个符号-.S在前则加在前,在后则在后.

TO_CHAR(-1234,'S9999')=-1234;

TO_CHAR(1234,'S9999')=+1234
 

16 、TM TM9/TMe

使用这个参数等于没有用参数to_char(number)一样,应为'tm9'是默认的格式参数.

to_char(1234,'tme')=1234

注意事项:格式要么是TM9,要么是TME.

当数字长度超过64位时候,TM9的输出等同于TME的输出.
 

17、 U U999 双币符号,例如欧元.作用同11的L

TO_CHAR(999,'U999')=¥999

注意事项:通过NLS_DUAL_CURRENCY 控制



18 、V 999V9 这是个比较古怪,又不是很常使用的符号。它的作用在于做一个计算。

例如

TO_CHAR(N,'999V9'),以p表示V的位置,则该表达式=to_char(N×(10的P-1次方)).但是9个数又必须保证大于等于乘积之后表示的位数.

TO_CHAR(5,'9V')=5*1=5;

TO_CHAR(5,'9V9')=5*10=50

TO_CHAR(5,'9V99')=500

TO_CHAR(50,'9V99')='######' 9的个数不够

注意事项:格式中不能和小数表达写在一起,但是可以混合货币等。
 


19、 X xxxx 转换为16进制

TO_CHAR(100,'XX')= 64

注意事项:数值必须是大于等于0的整数。前面只能和0或者FM组合使用.

 

二、 TO_CHAR(CHARACTER)

把NCLOB,CLOB,NCHAR转换为VARCHAR2.



三、TO_CHAR(DATETIME)

把日期转化为字符串.

关于这个格式,没有什么太好说的。它的格式主要分为两类:简写单个字母(或者其复现形式)代表时间位置譬如yyyy ,mm,dd ,hh之类;其次是以英文的时间单词的简写代表时间,例如mon,day,year.
 

模板 描述
HH 一天的小时数 (01-12)
HH12 一天的小时数 (01-12)
HH24 一天的小时数 (00-23)
MI 分钟 (00-59)
SS 秒 (00-59)
SSSS 午夜后的秒 (0-86399)
AM or A.M. or PM or P.M. 正午标识(大写)
am or a.m. or pm or p.m. 正午标识(小写)
Y,YYY 带逗号的年(4 和更多位)
YYYY 年(4和更多位)
YYY 年的后三位
YY 年的后两位
Y 年的最后一位
BC or B.C. or AD or A.D. 年标识(大写)
bc or b.c. or ad or a.d. 年标识(小写)
MONTH 全长大写月份名(9字符)
Month 全长混合大小写月份名(9字符)
month 全长小写月份名(9字符)
MON 大写缩写月份名(3字符)
Mon 缩写混合大小写月份名(3字符)
mon 小写缩写月份名(3字符)
MM 月份 (01-12)
DAY 全长大写日期名(9字符)
Day 全长混合大小写日期名(9字符)
day 全长小写日期名(9字符)
DY 缩写大写日期名(3字符)
Dy 缩写混合大小写日期名(3字符)
dy 缩写小写日期名(3字符)
DDD 一年里的日子(001-366)
DD 一个月里的日子(01-31)
D 一周里的日子(1-7;SUN=1)
W 一个月里的周数
WW 一年里的周数
CC 世纪(2 位)
J Julian 日期(自公元前4712年1月1日来的日期)
Q 季度
RM 罗马数字的月份(I-XII;I=JAN)-大写
rm 罗马数字的月份(I-XII;I=JAN)-小写

四、Oracle的to_char()函数总结

1、 Oracle的to_char()函数功能很强大但是在用它格式化数值型数据时应该请注意以下几项。如果是小数如:0.23这样的数据经过to_char后再显示会变为.23,如果你为了让它显示出原来的0.23的话就得用To_char(要格式化的数值,’0.999’)保留三个小数,并显示但这里就要注意了。他为你截取小数的时候是四舍五入了。所以如果是要求截掉小数而不四舍五入的话就应该自己写个函数截下去后再规格化。以保证它不四舍五入。

2、 To_char(1.9999,’FM90.0999’)这个函数规格化时90.0999的含义是有9的地方如果有数字就显示如果没有数字就不显示,有0的地方在没有数字的时候也会有0来占位.但这样做也有一个很大的缺点,就是如果是整数时它也仍然会显示”.”,不要小瞧这个点,一般来讲页面上要显示的话这个点就是多余的.也给我们造成了不小的麻烦.还要自己再写函数来把这个小点搞定.

3、 对于日期型的Oracle倒时提供了一个好的处理方法,可以把日期做成数值型的.然后再To_char就能显示出你所需要的类型了.

4、 在使用select into时一定要注意,这种方法你一定要确认肯定会有数据被查出时才能使用.如果查询结果为空时会导致报错.还有一种情况是查出来的数据是多条也会报错.所以应该尽量便宜游标来做.会减少错误产生的机率.

5、rownum不支持排序,就是说你想用这个来控制行数的话就会发现他没有按你指定的排序方式显示.,这是一个很难办的事.而且如果你用rownum=2这样的语句来输出第二行的话也是行不通的. 六、 最恶心的一点是Oracle对null的判断变态到极点.如果你说某个变量 aa=null它是判断不出来的.尽管aa的确是空.即使在选择条件里也是判断不出来的.不知道为什么,只好用nvl()这个函数来判断了.在条件之外可以用 aa is null 来判断.

6、 在写存储过程时要注意参数名不能与数据库字段名相同.否则Oracle会把这个参数名看成是字段名的,即使你用表的别名区分也不行.所以起参数名的时候一定要注意这点了.

标签: