当前位置:首页 > Oracle

Oracle格式化函数

canca16年前 (2010-07-22)Oracle660

格式化函数

 

 

函数 返回类型 描述 例子
to_char(timestamp, text) text 把时间戳转换成字串 to_char(current_timestamp, 'HH12:MI:SS')
to_char(interval, text) text 把时间间隔转为字串 to_char(interval '15h 2m 12s', 'HH24:MI:SS')
to_char(int, text) text 把整数转换成字串 to_char(125, '999')
to_char(double precision, text) text 把实数/双精度数转换成字串 to_char(125.8, '999D9')
to_char(numeric, text) text 把 numeric 转换成字串 to_char(numeric '-125.8', '999D99S')
to_date(text, text) date 把字串转换成日期 to_date('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(text, text) date 把字串转换成时间戳 to_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text) numeric 把字串转换成 numeric to_number('12,454.8-', '99G999D9S')

 

用于日期/时间格式化的模板

 

模板 描述
HH 一天的小时数 (01-12)
HH12 一天的小时数 (01-12)
HH24 一天的小时数 (00-23)
MI 分钟 (00-59)
SS 秒 (00-59)
MS 毫秒 (000-999)
US 微秒 (000000-999999)
SSSS 午夜后的秒 (0-86399)
AMA.M.PMP.M. 正午标识(大写)
ama.m.pmp.m. 正午标识(小写)
Y,YYY 带逗号的年(4 和更多位)
YYYY 年(4和更多位)
YYY 年的后三位
YY 年的后两位
Y 年的最后一位
BCB.C.ADA.D. 纪元标识(大写)
bcb.c.ada.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;周日=1)
W 一个月里的周数(1-5)(第一周从该月第一天开始)
WW 一年里的周数(1-53)(第一周从该年的第一天开始)
IW ISO 一年里的周数(第一个星期四在第一周里)
CC 世纪(2 位)
J 儒略日(自公元前4712年1月1日来的天数)
Q 季度
RM 罗马数字的月份(I-XII;I=JAN)(大写)
rm 罗马数字的月份(I-XII;I=JAN)(小写)
TZ 时区字串 (大写)
tz 时区字串 (小写)

 

日期/时间格式化的模板模式修饰词

 

修饰词 描述 例子
FM 前缀 填充模式(抑制填充空白和零) FMMonth
TH 后缀 大写顺序数后缀 DDTH th 后缀 小写顺序数后缀 DDth FX 前缀 固定格式全局选项(见用法须知) >FX Month DD Day SP suffix 拼写模式(还未实现) DDSP

 

  • FM 抑制前导的零或尾随的空白, 如果没有使用它的话,会在输出中增加这些填充最终把输出变成固定宽度的模式。

  • 如果没有使用 FX 选项, to_timestampto_date 在转换字串的时候忽略多个空白。 FX 必须做为模板里的第一个项声明。 比如 to_timestamp('2000 JUN', 'YYYY MON') 是正确的, to_timestamp('2000 JUN', 'FXYYYY MON') 会返回一个错误,因为to_timestamp 只预料会有一个空白。

  • to_char 模板 里可以有普通文本,并且它们会被照字输出。 你可以把一个字串放到双引号里强迫它解释成一个文本, 即使它里面包含模式关键字也如此。比如,在 '"Hello Year "YYYY'YYYY 将被年份数据代替,但是Year里单独 的 Y 不会。

  • 如果你想在输出里有双引号,那么你必须在它们 前面放双反斜杠,比如 '\\"YYYY Month\\"'. (需要两个反斜杠是因为反斜杠在字串常量里已经有特殊含义了。)

  • 如果你使用的年份长于 4 位字符,那么用 YYYY 从字串向timestamp或者date 做转换时要受到限制。 你必须在 YYYY 后面使用一些非数字字符或者模板, 否则年份总是解释为 4 位数字。比如(对于 2000 年): to_date('20001121', 'YYYYMMDD') 将会被解释成一个 4 位数字的年份, 最好在年后面使用一个非数字的分隔符,象 to_date('2000-1121', 'YYYY-MMDD')to_date('2000Nov31', 'YYYYMonDD')

  • 将字串转化为timestamp时, 毫秒(MS)和微秒(US)都是用字串 的小数点后面的部分转换的。比如 to_timestamp('12:3', 'SS:MS') 不是 3 毫秒, 而是 300,因为转换把它看做 12 + 0.3 秒。 这意味着对于格式 'SS:MS'而言,输入值为 12:312:3012:300 声明了相同数目的 毫秒。对于三毫秒,你必须使用 12:003,那么转换会把它看做 12 + 0.003 = 12.003 秒。

    用于数值格式化的模板模式

    模板 描述
    9 带有指定数值位数的值
    0 带前导零的值
    . (句点) 小数点
    , (逗号) 分组(千)分隔符
    PR 尖括号内负值
    S 带符号的数值(使用区域设置)
    L 货币符号(使用区域设置)
    D 小数点(使用区域设置)
    G 分组分隔符(使用区域设置)
    MI 在指明的位置的负号(如果数字 <>
    PL 在指明的位置的正号(如果数字 > 0)
    SG 在指明的位置的正/负号
    RN 罗马数字(输入在 1 和 3999 之间)
    THth 序数后缀
    V 移动指定位(小数)(参阅注解)
    EEEE 科学记数。(现在还未实现)

    to_char 例子

    表达式 结果
    to_char(current_timestamp, 'Day, DD HH12:MI:SS') 'Tuesday , 06 05:39:18'
    to_char(current_timestamp, 'FMDay, FMDD HH12:MI:SS') 'Tuesday, 6 05:39:18'
    to_char(-0.1, '99.99') ' -.10'
    to_char(-0.1, 'FM9.99') '-.1'
    to_char(0.1, '0.9') ' 0.1'
    to_char(12, '9990999.9') ' 0012.0'
    to_char(12, 'FM9990999.9') '0012.'
    to_char(485, '999') ' 485'
    to_char(-485, '999') '-485'
    to_char(485,'9 9 9') ' 4 8 5'
    to_char(1485, '9,999') ' 1,485'
    to_char(1485, '9G999') ' 1 485'
    to_char(148.5, '999.999') ' 148.500'
    to_char(148.5, 'FM999.999') '148.5'
    to_char(148.5, 'FM999.990') '148.500'
    to_char(148.5, '999D999') ' 148,500'
    to_char(3148.5, '9G999D999') ' 3 148,500'
    to_char(-485, '999S') '485-'
    to_char(-485, '999MI') '485-'
    to_char(485, '999MI') '485 '
    to_char(485, 'FM999MI') '485'
    to_char(485, 'PL999') '+485'
    to_char(485, 'SG999') '+485'
    to_char(-485, 'SG999') '-485'
    to_char(-485, '9SG99') '4-85'
    to_char(-485, '999PR') '<485>'
    to_char(485, 'L999') 'DM 485
    to_char(485, 'RN') ' CDLXXXV'
    to_char(485, 'FMRN') 'CDLXXXV'
    to_char(5.2, 'FMRN') 'V'
    to_char(482, '999th') ' 482nd'
    to_char(485, '"Good number:"999') 'Good number: 485'
    to_char(485.8, '"Pre:"999" Post:" .999') 'Pre: 485 Post: .800'
    to_char(12, '99V999') ' 12000'
    to_char(12.4, '99V999') ' 12400'
    to_char(12.45, '99V9') ' 125'

    例如:

    想把一个带小数点的Number型转换成String型的话:

    select TO_CHAR(100000.0, 'FM999,999,999,990.90') from dual;

    结果是:100,000.00

     

    说明:FM前缀的作用是去除首尾的空字符或0,如果select TO_CHAR(100000.0, 'FM999,999,999,999.99') from dual;

    结果是:100,000.

     

    附:oracle补零

    1.前端补0:

    Sql代码 复制代码
    1. select lpad('345',8,'0'from dual;   
    2. select to_char('345','00000000'from dual;  
    select lpad('345',8,'0') from dual;  select to_char('345','00000000') from dual;  

    2.后端补0:

    Sql代码 复制代码
    1. select rpad('345',8,'0'from dual;  
  • 扫描二维码推送至手机访问。

    版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

    本文链接:https://iant.work/post/282.html

    标签: Oracle
    分享给朋友:

    “Oracle格式化函数” 的相关文章

    Oracle 错误信息原文解释

    1. Dropping Clustered TablesTo drop a cluster, your schema must contain the cluster or you must have the DROP ANY CLUSTER system privilege. You do not…

    Oracle正则表达式

    Oracle 10g数据库内建了符合IEEE POSIX (Portable Operating System for Unix)标准的正则表达式。熟练使用正则表达式,可以写出简洁,强大的SQL语句。 正则表达式有几个优点优于常见的LIKE操作符和INSTR、SUBSTR及REPLACE 函数…

    发表评论

    访客

    ◎欢迎参与讨论,请在这里发表您的看法和观点。