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 》

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

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

  • 元素: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. Js6利用class创建类

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

  2. 开始导入第一个第三方库jieba

    在做python的练习题,想看看运行结果. 谁知,有道题,不能识别jieba,原来要导入,因为是第三方库,照着书里面的导入方法,有三种,一种是用pip,在命令行里面安装,使用pip - p 可以查看p ...

  3. 数学--数论--hdu 5878 I Count Two Three(二分)

    I will show you the most popular board game in the Shanghai Ingress Resistance Team. It all started ...

  4. Codeforce 270D Greenhouse Effect

    Emuskald is an avid horticulturist and owns the world's longest greenhouse - it is effectively infin ...

  5. UDP广播的客户端和服务器端的代码设计

    实验环境 linux 注意: 使用UDP广播,是客户端发送广播消息,服务器端接收消息.实际上是客户端探测局域网中可用服务器的一种手段.客户端发送,服务器端接收,千万不能弄混淆!!! 为了避免混淆,本文 ...

  6. C. Helga Hufflepuff's Cup 树形dp 难

    C. Helga Hufflepuff's Cup 这个题目我感觉挺难的,想了好久也写了很久,还是没有写出来. dp[i][j][k] 代表以 i 为根的子树中共选择了 j 个特殊颜色,且当前节点 i ...

  7. 使用JDBC连接oracle数据库

    需要jar包:ojdbc6.jar

  8. 王颖奇 20171010129《面向对象程序设计(java)》第十三周学习总结

      实验十三  图形界面事件处理技术 实验时间 2018-11-22 1.实验目的与要求 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作机制: (3) 掌握事件处理的基 ...

  9. python语法学习第十天--魔法方法

    魔法方法二!!! 属性访问:在对属性任何操作时,都会调用   有关属性 __getattr__(self, name) 定义当用户试图获取一个不存在的属性时的行为 __getattribute__(s ...

  10. kubernetes部署redis主从高可用集群

    1.redis主从高可用集群结构 2.k8s部署有状态的服务选择 对于K8S集群有状态的服务,我们可以选择deployment和statefulset statefulset service& ...