Oracle格式化函数

来源:互联网 发布:苹果电脑围棋打谱软件 编辑:程序博客网 时间:2024/05/17 01:21

在写Oracle的时候,经常做一些日期,字符串或者数字的格式化;下面就是我写的一些笔记:

格式化函数

函数返回类型描述例子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把字串转换成 numericto_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)(第一周从该年的第一天开始)IWISO 一年里的周数(第一个星期四在第一周里)CC世纪(2 位)J儒略日(自公元前4712年1月1日来的天数)Q季度RM罗马数字的月份(I-XII;I=JAN)(大写)rm罗马数字的月份(I-XII;I=JAN)(小写)TZ时区字串 (大写)tz时区字串 (小写)

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

修饰词描述例子FM前缀填充模式(抑制填充空白和零)FMMonthTH后缀大写顺序数后缀DDTHth后缀小写顺序数后缀DDthFX前缀固定格式全局选项(见用法须知)>FX Month DD DaySPsuffix拼写模式(还未实现)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 位数字。比如(对于 20000 年):to_date('200001131', 'YYYYMMDD')将会被解释成一个 4 位数字的年份, 最好在年后面使用一个非数字的分隔符,象to_date('20000-1131', 'YYYY-MMDD')to_date('20000Nov31', '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 485to_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;

    结果是:100000.00

    to_char(round(number,4)) 取得两位小数

    to_char(number,'99990.9999') 取得两位小数

  • 原创粉丝点击
    热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胃老是往上反气怎么办 有口气憋在喉咙怎么办 肛裂伤口不愈合怎么办 肛裂口子不愈合怎么办 宝宝胃食道反流怎么办 去角质后脸发红怎么办 红烧肉做的太甜怎么办 红烧排骨太甜了怎么办 唱歌时嗓子有痰怎么办 一唱歌喉咙有痰怎么办 鼻子老是打喷嚏还流鼻涕怎么办 鼻涕流到喉咙里怎么办 鼻塞怎么办怎样让鼻通气 流清鼻涕嗓子疼怎么办 喉咙疼咳嗽有痰怎么办 扁桃体发炎痛得厉害怎么办 腭垂掉下来了怎么办 喉咙干有异物感怎么办 嗓子干有异物感怎么办 输液的时候手疼怎么办 一感冒就嗓子哑怎么办 4岁儿童喉咙沙哑怎么办 嗓子老有异物感怎么办 喉咙咽口水都疼怎么办? 舌头上长了溃疡怎么办 包包的拉链坏了怎么办 做试管取精困难怎么办 sw过膝靴往下掉怎么办 如果被绑架了该怎么办 怀孕了%2c怎么办%3f 狗狗拉肚子怎么办带血 同学们不和我玩怎么办 懒癌和拖延症怎么办 有严重的拖延症怎么办 有拖延症的人怎么办 10多天月经不停怎么办 20多天月经不停怎么办 月经来了十几天不停怎么办 例假20多天不停怎么办 苹果6dns被劫持怎么办 工地欠工资不给怎么办