TO_CHAR详解


一、TO_CHAR(date[,format[,nlsparams]])将日期date转化为VARCHAR2字符串

      format缺省日期格式为Oracle的缺省日期格式(NLS_DATE_FORMAT)。

                结果字符串的大小写风格:可以用Year,year,YEAR,Mon等这类format字符串控制。

                分隔符:-(中杠)/(斜杠),(逗号).(句点);(分号):(冒号) 等

                可以使用引号""来指定任何文本作为分隔符。

      nlsparams指定返回字符串所使用的语言,可以修改session的NLS_DATE_LANGUAGE改变其缺省值。

      修改方法:alter session set NLS_DATE_LANGUAGE='AMERICAN' 。

      如果不使用默认值,可使用如下格式:'NLS_DATE_LANGUAGE=language'

       1) 公元(AD | A.D.)或公元前(BC | B.C.):自动根据日期判断是AD还是BC

            TO_CHAR(sysdate,'YYYY-MM-DD BC')  --值:2009-12-04 AD

        2) 午前(AM | A.M.)或午后(PM | P.M.):自动根据时间判断是午前还是午后

            TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS AM')  --值:2009-12-04 15:10:44 PM

       3)CC与SCC:世纪数,使用SCC时,公元前为负数,公元后为正数;使用CC结果为SCC的绝对值

             TO_CHAR(sysdate,'SCC')  -- 值:21       TO_CHAR(sysdate-3000 * 365,'SCC') -- 值:-10

        4)年:

              Y:年的最后1位数字。TO_CHAR(sysdate,'Y') -- 值:9

              YY:年的最后2位数字。TO_CHAR(sysdate,'YY') -- 值:09

              RR:年的最后2位数字,Oracle为了解决两千年问题而提出的。

                  在TO_DATE中,如果使用了YY(9i以前版本两位日期默认格式),那么年份前两位是当前世纪;

                  如果使用RR(9i以后版本两位日期默认格式),有如下四种判断:

                  A、当当前年份的最后两位数为 0~49,指定年份的最后两位也是 0~49,那么使用本世纪。

                  B、当当前年份的最后两位数为 0~49,指定年份的最后两位也是50~99,那么使用上世纪。

                  C、当当前年份的最后两位数为50~99,指定年份的最后两位也是 0~49,那么使用下世纪。

                  D、当当前年份的最后两位数为50~99,指定年份的最后两位也是50~99,那么使用本世纪。

              YYY:年的最后3位数字。TO_CHAR(sysdate,'YYY') -- 值:009

              YYYY:年的4位表示。TO_CHAR(sysdate,'YYYY') -- 值:2009

                       TO_CHAR(sysdate,'YYYYYY') -- 值:200909,因为先匹配四位,再匹配2位,其它可推

              I:ISO年中的最后1位数字

              IY:ISO年中的最后2位数字

              IYY:ISO年中的最后3位数字

              IYYY:ISO年中的最后4位数字

              SYYYY:年的4位表示,公元前BC返回负数

              Y,YYY:逗号分位的年,逗号在其它位置会当做分隔来处理,其它字符(非,)无效

                            TO_CHAR(sysdate,'Y,YYY') --值:2,009   正确

                            TO_CHAR(sysdate,'YY,YY') --值:09,09   错误,只能在第2位

                            TO_CHAR(sysdate,'Y.YYY') --值:9.009   错误,不能为 '.'

              YEAR:年份的英文全拼。TO_CHAR(sysdate,'YEAR') --值:TWO THOUSAND NINE

              SYEAR:公元前年份为负。TO_CHAR(sysdate-3000*365,'YEAR') --值:-NINE EIGHTY-NINE

         5)季度(Q):1~4   TO_CHAR(sysdate,'Q')  --值:4

         6)月:

               MONTH:全称。TO_CHAR(sysdate,'FMMONTH') --值:DECEMBER

               MON:简称。TO_CHAR(sysdate,'MON') --值:DEC

               MM:1~12。TO_CHAR(sysdate,'MM') --值:12

               RM:罗马数字中的月份,I~XII。 TO_CHAR(sysdate,'FMRM') -- 值:XII

         7)星期:

               W:该月中的第几周(1~5)

               WW:一年中的第几周(1~53)

               IW:ISO标准的年中的第几周(1~52,1~53)

         8)日:

               D:一周中的第几日,1~7。TO_CHAR(sysdate,'D') --值:6

               DD:一月中的第几日。TO_CHAR(sysdate,'DD') --值:06,可用FM压缩0与空格

               DDD:一年中的第几日。TO_CHAR(sysdate,'DDD') --值:338,有0可用FM压缩

               DAY:英文天的全拼。TO_CHAR(sysdate,'DAY')  --值:"FRIDAY   ",使用FM可压缩空格(FMDAY)

               DY:英文简称。TO_CHAR(sysdate,'DY')  --值:FRI

         8)小时:

               HH或HH12:1~12表示

               HH24:1~24表示

         9)分:MI,0~59表示

       10)秒:

              SS:0~59

              SSSS:从午夜开始过去的描述(0~86399)

        11)拼写形式:

              TH:数字的后缀。TO_CHAR(SYSDATE,'DdTH') --值:04th

              SP:数字的英文拼写。TO_CHAR(SYSDATE,'DdSP') --值:Four

              SPTH或THSP:TH与SP的组合。TO_CHAR(SYSDATE,'DdSPTH') --值:Fourth

                   TO_CHAR(SYSDATE,'DDSPTH "of" MONTH, YEAR A.D.')

                    -- 值:FOURTH of DECEMBER , TWO THOUSAND NINE A.D.

二、TO_CHAR(number[,format[,nlsparams]]):将数值number转化为VARCHAR2字符串。

     format缺省,结果字符串包含有和number中有效位数相同位数的字符。

     nlsparams用来指定小数点和千分位分隔符以及货币的符号。如下所示:

        'NLS_NUMBER_CHARACTERS="dg" NLS_CURRENCY="string"'

         其中d表示小数位分隔符,g表示千分位分隔符,string表示货币符号。

         1)0与9:每一个0或9都表示一个有效位,转换值得有效位与0或9的各位相同。负数有前导负号,前导为0时,使用0,保持不变,使用9则视为空格。如果精度减小,自动四舍五入。

               TO_CHAR(0.37,'00.000')   ---值:" 00.370",一个空格

               TO_CHAR(0.37,'90.000')   ---值:"  0.370",两个空格

         2)千分位与小数位:

                逗号",":在指定位置返回一个逗号(可以不在千分位位置)。不能与G,D等格式元素同时使用

                G:返回千分位分隔符,不一定是",",要看Oracle数据库的默认设置或nlsparams的值。

                句点".":在指定位置返回一个句点(可以不在小数位位置)。不能与G,D等格式元素同时使用

                D:返回小数位分隔符,不一定是".",要看Oracle数据库的默认设置或nlsparams的值

                TO_CHAR(1222.2,'FML9G999D99','NLS_NUMERIC_CHARACTERS=DG NLS_CURRENCY=¥')

                        --值:¥1G222D2

           3)货币符

                 $:TO_CHAR(0.37,'FM$90.000')  --值:$0.370

                 L:本地货币符号,TO_CHAR(37,'L99')  --值:$37,即NLS_CURRENCY的值

                 C:ISO货币符,TO_CHAR(22,'FMC99') --值:USD22

            4)后继负号(只能为后缀):值为负,加后继负号,否则加后继占位符

                  TO_CHAR(-222,'999MI') --值:222-

            5)S:S在前,为前导+或-号,在后,为后继+或-号

                 TO_CHAR(222,'S999') --值:+222

            6)PR:为负数,用尖括号扩起来,正数前导后继各加一个空格

                 TO_CHAR(-222,'999PR') --值:<222>

            7)数字 * 10的n次方

                  V:返回与10的n次方相乘的值,n是V后面9的个数

                        TO_CHAR(22,'99V9999') --值:" 220000"

             8)科学计数法返回值(EEEE)

                   TO_CHAR(22,'9.99EEEE') --值:"  2.20E+01"

             9)返回罗马数字

                   RM(返回大写),rm(返回小写)

                   TO_CHAR(555,'FMRM') --值:DLV

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值