记一次开发过程中遇到的数据库问题
通常在做数据运算后,会想要指定格式的数据,格式化的方法有几种:TO_CHAR、TO_NUMBER、TO_BINARY_FLOAT、TO_BINART_DOUBLE,这里主要介绍TO_CHAR的方法。
TO_CHAR中使用FM格式来格式化数据。
select to_char(0.1966666,'FM99990.00') from dual
执行结果为0.20
先不说结果不是0.19的问题,先说为什么会是这种格式。
FM99990.00
代表什么意思:
①9:如果存在数字则显示数字,反之显示空格
②0:存在数字就显示数字,反之显示0
③FM:删除因为9带来的空格
FM99990.00
意思是整数位5位,小数位2位
再来说说为什么结果会是0.20:
原因是因为使用格式化会引起四舍五入,如果数字大于格式化的数字,会被格式化为######的格式,解决办法如下:
select to_char(trunc(0.1966666,2),'FM99990.00') from dual
Oracle支持的格式:
Format | Description |
---|---|
9 | 代表一位任意数字 |
. | 小数点 |
D | 本地化小数点(NLS_NUMERIC_CHARACTER) |
, | 千分位 |
G | 本地化千分位(NLS_NUMERIC_CHARACTER) |
S | 在前部或尾部添加正负号 |
0 | 在前部或尾部添加 0 |
$ | 在前部添加美元符号 |
L | 添加本地化货币符号(NLS_CURRENCY) |
U | 添加DUAL货币符号(NLS_DUAL_CURRENCY) |
C | 添加ISO货币符号(NLS_ISO_CURRENCY) |
B | 添加空格如果整数部分为0 |
X | 将10 进制转成16进制 |
V | 将要格式化的值乘以10n |
EEEE | 科学计数法 |
MI | 对于正数,在尾部添加空格;对于负数,在尾部添加负号 |
PR | 对于正数,在尾部添加空格;对于负数,在尾部添加负号 |
RN | 返回大写罗马数字 |
rn | 返回小写罗马数字 |
TM | 超过64位,返回科学计数法 |