@sql
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
格式模型是描述存储在字符串中的日期时间或数字数据格式的字符文本。格式模型不会更改数据库中值的内部表示形式。将字符串转换为日期或数字时,格式模型将肯定Oracle数据库如何解释字符串。less
平常开发中因为业务须要,咱们一般使用:spa
--fmt:称之为数字格式化模型 select to_char(number, 'fmt') from dual;
将数字转换为咱们须要的格式显示。code
转换的结果可能与预想出现误差,例如常见的几个问题:orm
整数部分为0的小数,转换后以小数点开头,0被省略。element
--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
描述:
--整数部分,若是对应位置存在数字则显示数字(以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 格式元素能够只能出如今数字的格式模型的最后一个位置。
--返回正数值且尾随空白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格式元素只能出如今数字格式模型的最后一个位置。
--返回正数值且头尾附加空格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
在格式化模型前时,负数返回带前导负号(-)与负数值,正数返回带前导正号(+)与正数值。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;