首页 > 数据库 >记一次Oracle返回指定保留小数的数字问题

记一次Oracle返回指定保留小数的数字问题

时间:2022-10-27 13:56:00浏览次数:50  
标签:999 指定 小数点 char dual lpad Oracle select 小数

1 问题背景

在Oracle中,根据数据库中配置的保留小数位数,给数据保留对应的位数

2 Oracle to_char函数格式化数字用法介绍

「参数说明」

参数 说明 示例
9 存在数字显示数字,不存在显示空格 999
0 存在数字显示数字,不存在显示0 000
. 指定位置返回小数点 99.99
, 指定位置返回逗号 999,999,999
FM 如果是因为9带来的空格则删除 FM999,999,99.00
$ 数字开头返回一个美元符号 FM$999,999,99.00

「实例展示」

select to_char(a),
       to_char(a,'99.90'),
       to_char(a,'90.90'),
       to_char(a,'FM90.99'),
       rtrim(to_char(a,'FM90.99'),to_char(0,'.'))
from(
       select 50 a from dual
       union all select 50.57 from dual
       union all select 5.57 from dual
       union all select 0.35 from dual
       union all select 0.4 from dual
)

「SQL结果」

从上图我们可以看出to_char格式化数字的时候有个坑,如果小数点前面只有0,格式化之后0会丢失。

怎么解决呢,只需要在小数点前面用0这个占位符就可以了。

例如:格式化一个百分比,小数点后面保留2位,没有补0

to_char(a,'FM990.00')

因为百分数的整数部分最多3位,所以要有三个占位符,防止小数点前面的0丢失,所以小数点前面写0,因为小数点后面没有数字需要补0,所以不能填99,只能填00。

3 oracle的lpad()函数

lpad函数是Oracle数据库函数,lpad函数从左边对字符串使用指定的字符进行填充。从其字面意思也可以理解,l是left的简写,pad是填充的意思,所以lpad就是从左边填充的意思。

「语法格式如下:」

lpad( string, padded_length, [ pad_string ] )

string:准备被填充的字符串

padded_length:填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符

pad_string:填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,lpad函数将会在string的左边粘贴空格

「实例展示」

SQL> select lpad('abcde',10,'oq') from dual;
LPAD('ABCDE',10,'OQ')
---------------------
oqoqoabcde
SQL> select lpad('abcde',2) from dual;
LPAD('ABCDE',2)
---------------
ab

标签:999,指定,小数点,char,dual,lpad,Oracle,select,小数
From: https://www.cnblogs.com/bluestraggle/p/16831955.html

相关文章