Oracle数字格式化

A format model is a character literal that describes the format of datetime or numeric data stored in a character string. A format model does not change the internal representation of the value in the database. When you convert a character string into a date or number, a format model determines how Oracle Database interprets the string.

--《Oracle Database SQL Reference 》

格式模型是描述存储在字符串中的日期时间或数字数据格式的字符文本。格式模型不会更改数据库中值的内部表示形式。将字符串转换为日期或数字时,格式模型将确定Oracle数据库如何解释字符串。

开发中的常见问题

日常开发中由于业务需要,我们通常使用:

--fmt:称之为数字格式化模型
select to_char(number, 'fmt') from dual;

将数字转换为我们需要的格式显示。

转换的结果可能与预想出现偏差,例如常见的几个问题:

  • 整数部分为0的小数,转换后以小数点开头,0被省略。

    --result:'.66'
    select to_char(0.66, 'fm99.99') result from dual;

    出现这种问题,是因为数字格式化模型元素9在整数部分时,如果对应位置存在数字则显示数字,以0开头的0不显示,用空格占位(在下面的数字格式模型元素中有详细介绍)。我们需要修改一下数字格式化模型:

    --result:'0.60'
    select to_char(0.60, 'fm90.90') result from dual;
  • 查询出的结果出现一连串井号(#)。

    --result:'######'
    select to_char(666.66, '99.99') result from dual;

    这是由于待转化的数字位数长度大于了数字格式模型的长度(整数部分。对于小数部分来说,是将实际值四舍五入保留至与数字格式模型相同位数)

数字格式模型元素

Negative return values automatically contain a leading negative sign and positive values automatically contain a leading space unless the format model contains the MI, S, or PR format element.

--《Oracle Database SQL Reference 》

除非格式模型包含 MISPR格式元素,否则负值返回值自动包含前导负号,正值返回值自动包含前导空格(即数字转换为字符的结果会多出一个空格)。

数字格式模型由一个或多个数字格式元素组成。下面的表列出了数字格式模型的元素并提供了一些示例。

  • 元素:FM/fm

    描述:返回没有前导或尾随空格的值(若小数部分以0结尾去掉0)。

    --无fm的result:'  66.660'
    --有fm的result:'66.66'
    select to_char(66.66, 'fm999.999') result from dual;
  • 元素:0

    描述:如果对应位置存在数字则显示数字,不存在则显示0(是0则显示0)。

    --如果对应位置存在数字则显示数字 result:' 6666'
    select to_char(6666, '0000') result from dual; --如果对应位置不存在数字则显示0 result:' 0666'
    select to_char(666, '0000') result from dual;
  • 元素:9

    描述:

    1. 整数部分,如果对应位置存在数字则显示数字(以0开头的0不显示,用空格占位),不存在数字则用空格占位。
    2. 小数部分,如果对应位置存在数字则显示数字(以0结尾的0显示),不存在数字则显示0。
    --整数部分,如果对应位置存在数字则显示数字(以0开头不显示0)result:'  666'
    select to_char(0666, '9999') result from dual; --整数部分,对应位置不存在则用空格占位result:' 666'
    select to_char(666, '9999') result from dual; --小数部分,如果对应位置存在数字则显示数字(以0结尾显示0)result:' 66.60'
    select to_char(66.60, '99.99') result from dual; --小数部分,如果对应位置不存在数字则显示0;result:' 66.60'
    select to_char(66.6, '99.99') result from dual;
  • 元素:,(半角逗号)

    描述:在指定位置返回逗号。可以在数字格式模型中指定多个逗号。

    限制:(1)逗号元素不能在数字格式模型开头。(2)在数字格式模型中,小数点右侧不能出现逗号。

    --result:' 6,666'
    select to_char(6666, '9,999') result from dual;
  • 元素:.(半角句号)

    描述:返回小数点,它是指定位置的句点(.)。

    限制:在数字格式模型中只能指定一个句点。

    --result:' 66.00'
    select to_char(66, '99.99') result from dual;
  • 元素:B

    描述:当整数部分为零时,返回定点数整数部分的空格(与格式模型中的零无关)。

    --result:'    '(四个空格)
    select to_char(0.36, 'B099') from dual;
  • 元素:C

    描述:在指定位置返回ISO货币符号。

    --result:'     CNY66'
    select to_char(66, 'C99') result from dual;
  • 元素:EEEE

    描述:返回以为科学记数法形式中使用的值。

    --result:'  6.6E+01'
    select to_char(66, '9.9EEEE') result from dual;
  • 元素:G(与半角逗号类似)

    描述:在指定位置返回组分隔符。可以在数字格式模型中指定多个组分隔符。

    限制:在数字格式模型中,组分隔符不能出现在小数字符或句点的右侧

    --result:' 6,666'
    select to_char(6666, '9,999') result from dual;
  • 元素:L

    描述:在指定位置返回本地货币符号(NLS_currency标准)。

    --result:'         ¥66.66'
    select to_char(66.66, 'L99.99') result from dual;
  • 元素:美元符

    描述:返回带有前导美元符号的值。

    --result:' $66'
    select to_char(66, '$99') result from dual;
  • 元素:MI

    描述:如果是负数,返回负数值且尾随负号;如果是正数,返回正数值且尾随空格。

    限制: MI 格式元素可以只能出现在数字的格式模型的最后一个位置。

    --返回正数值且尾随空白result:'66.66 '
    select to_char(66.66, '99.99MI') result from dual; --返回负数值且尾随负号result:'66.66-'
    select to_char(-66.66, '99.99MI') result from dual;
  • 元素:PR

    描述:如果是负数,返回尖括号包含负数值;如果是正数,返回正数值且头尾附加空格。

    限制: PR格式元素只能出现在数字格式模型的最后一个位置。

    --返回正数值且头尾附加空格result:' 66 '
    select to_char(66, '99PR') result from dual; --返回尖括号包含负数值result:'<66>'
    select to_char(-66, '99PR') result from dual;
  • 元素:RN/rn

    描述:RN结果以大写罗马数字形式返回。rn结果以小写罗马数字形式返回。(结果字符共计十五位,不足十五位以空格左补齐)

    限制: 需要格式化的数值限定在1到3999之间的整数。

    --结果以大写罗马数字形式返回result:'              V'
    select to_char(5, 'RN') result from dual; --结果以小写罗马数字形式返回result:' iv'
    select to_char(4, 'rn') result from dual;
  • 元素:S

    描述:

    1. S在格式化模型前时,负数返回带前导负号(-)与负数值,正数返回带前导正号(+)与正数值。
    2. S在格式化模型后时,负数返回带后导负号(-)与负数值,正数返回带后导正号(+)与正数值。

    限制:S格式化元素只能出现在数字格式模型的第一个或最后一个位置

    --S在格式化模型前时,负数返回带前导负号(-)与负数值result:'-66'
    select to_char(-66, 'S99') result from dual; --S在格式化模型后时,正数返回带后导正号(+)与正数值result:'66+'
    select to_char(66, '99S') result from dual;
  • 元素:TM

    描述:标准数值与科学计数法,可以通过附加9或者e控制输出,默认是TM9。

    限制:不能将此元素与任何其他元素放在一起。只能用一个9或一个E(或e),而不能用这些元素的任何组合。

    --以科学计数法输出result:'6.66E+02'
    select to_char(666, 'TMe') result from dual; --以科学计数法输出result:'66'
    select to_char(66, 'TM9') result from dual;
  • 元素:X/x

    描述:返回指定位数的十六进制值。如果指定的数字不是整数,则Oracle数据库将其舍入为整数。

    限制:该元素只接受正值或0。负值返回错误。只能在这个元素前面加上0(返回前导零)或FM。任何其他元素都返回错误。如果使用X既不指定0也不指定FM,则返回始终有1个前导空格。

    --以十六进制输出result:'43'
    select to_char(66.6, 'FMxx') result from dual;
  • 元素:U

    描述:在指定位置返回欧元(或其他)双货币符号(NLS_DUAL_CURRENCY 标准)。

    --result:'         ¥6'
    select to_char(6, 'U9') result from dual;
  • 元素:V

    描述:返回一个值乘以10n(如有必要,将其四舍五入),其中n是V后面9的个数。

    --n是V后面9的个数,如下V字符后9的个数是2则result:' 6666'
    select to_char(66.66, '99V99') result from dual;

Oracle数字格式化的更多相关文章

  1. Oracle - 数字处理 - 取上取整、向下取整、保留N位小数、四舍五入、数字格式化

    用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...

  2. Java学习笔记 06 数字格式化及数学运算

    一.数字格式化 DecimalFormat类 >>DecimalFormat是NumberFormat的子类,用于格式化十进制数,可以将一些数字格式化为整数.浮点数.百分数等.通过使用该类 ...

  3. spring mvc4的日期/数字格式化、枚举转换

    日期.数字格式化显示,是web开发中的常见需求,spring mvc采用XXXFormatter来处理,先看一个最基本的单元测试: package com.cnblogs.yjmyzz.test; i ...

  4. 数字格式化函数:Highcharts.numberFormat()

    (转)数字格式化函数:Highcharts.numberFormat() 一.函数说明 该函数用于图表中数值的格式化,常见用途有数值精度控制.小数点符.千位符显示控制等.   二.函数使用   1.函 ...

  5. php实现数字格式化,数字每三位加逗号的功能函数

    原地址:http://www.jb51.net/article/73781.htm php实现数字格式化,数字每三位加逗号的功能函数,具体代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 ...

  6. (转)数字格式化函数:Highcharts.numberFormat()

    一.函数说明 该函数用于图表中数值的格式化,常见用途有数值精度控制.小数点符.千位符显示控制等.   二.函数使用   1.函数构造及参数 Highcharts.numberFormat (Numbe ...

  7. PHP数字格式化,每三位逗号分隔数字,可以保留小数

    在报价的时候为了给浏览者更清晰明确的数字,所以需要用到数字格式化,有两种方法,一种自己写函数,另一种当然是系统自带的,其实我更喜欢系统自带的. 先来系统简单的: string number_forma ...

  8. String.Format数字格式化参考

    String.Format数字格式化输出 {0:N2} {0:D2} {0:C2} (转) 数字 {0:N2} 12.36 数字 {0:N0} 13 货币 {0:c2} $12.36 货币 {0:c4 ...

  9. Java数字格式化输出时前面补0

    Java数字格式化输出时前面补0 星期日 2014年11月30日|  分类: Java     /** * 里数字转字符串前面自动补0的实现. * */ public class TestString ...

随机推荐

  1. C++编程入门题目--No.2

    题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%:20万到4 ...

  2. checked 完整版全选,单选,反选

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...

  3. 深度学习环境搭建:window10+CUDA10.0+CUDNN+pytorch1.2.0

    去年底入手一台联想Y7000P,配置了Nvidia GeForce GTX 1660 Ti GPU,GPU内存6G,但是因为有GPU服务器,所以一直没有在这台笔记本上跑过模型,如今经过一番折腾,终于在 ...

  4. CSS躬行记(9)——网格布局

    网格布局(Grid Layout)也叫栅格布局,与表格布局类似,也依赖行和列.但与之不同的是,网格布局能直接控制HTML文档中元素的顺序.位置和大小等,而不用再借助辅助元素. 一.术语 下图展示了CS ...

  5. Linova and Kingdom(树型-贪心)

    题目大意:给定一棵树,1为首都(首都可以是工业城市也可以是旅游城市),一共有n个点. 其中要选出k个工业城市,每个工业城市出一个代表去首都,其快乐值是其途径旅游城市(非工业)的个数 求所有快乐值相加的 ...

  6. matlab基础知识总结

  7. django开发最完美手机购物商城APP带前后端源码

    后端和数据接口,全采用django开发 从0到大神的进阶之路 一句话,放弃单文件引用vue.js练手的学习方式 马上从vue-cli4练手,要不然,学几年,你也不懂组件式开发,不懂VUEX,不懂路由, ...

  8. Linux下3种常用的网络测速工具

    大家好,我是良许. 不管你用的是什么操作系统,网速都是你非常关心的一个性能指标,毕竟,谁都不想看个视频结果网速卡到你怀疑人生.本文介绍三个 Linux 命令行下的网络测速工具,让你随时随地知道你的网络 ...

  9. Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构

    Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构 目录 Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构 0x00 摘要 0x01 Alink设计原则 0x02 A ...

  10. [hdu5373 The shortest problem]模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=5373 思路:按题意来即可. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...