两位小数解决方案:rtrim(to_char(ROUND(T.MANAGER_YIELD,4)*100, 'FM999990D99'), to_char(0, 'D'))

注:最后这个tochar(0,'D') 为了在 50.00 这种情况下,去除 .00 ,显示整数50

(1328条消息) Oracle 小数格式化字符串显示 (转)_Const Empty的博客-CSDN博客_oracle小数转字符串https://blog.csdn.net/l690781365/article/details/97272933

问题描述 
oracle如果存储number(20,2)数据,0数据库中为0.00,2.1数据库中为2.10,3.88存储为3.88, 
如果直接从数据库中取出对应显示为: 
0 2.1 3.88 保留两位小数会发生变化,如果需要和数据库保持一致:


解决方法 
保留两位有效小数的方法:

SELECT TO_CHAR(3.2,'FM99999999999990D00') FROM DUAL

参考实例:


-- 数字转字符串格式
select to_char(a, 'FM9990.00')"FM9990D00",to_char(a, '99D90')"99D90",to_char(a, 'FM90D99')"FM90D99",rtrim(to_char(a, 'FM999990D99'), to_char(0, 'D'))"FM999990D99"from (select 50 a from dualunion all select 50.57 from dualunion all select 5.57 from dualunion all select 0.35 from dualunion all select 0.4 from dual
)
     FM9990D00   99D90   FM90D99 FM999990D99
1   50.00       50.00   50.      50
2   50.57       50.57   50.57    50.57
3   5.57        5.57    5.57     5.57
4   0.35         .35    0.35     0.35
5   0.40         .40    0.4  0.4

分析

  1. 【FM9990.00】格式,皆满足;代码更简洁;与【rtrim(to_char(a, 'FM999990D99'), to_char(0, 'D'))"FM999990D99"】的区别整数是否保留小数。
  2. 【99D90】格式,问题:小数位小于1,0则不显示。
  3. 【FM90D99】格式,问题:小数位为0,则不显示。
  4. 【rtrim(to_char(a, 'FM999990D99'), to_char(0, 'D'))"FM999990D99"】格式,缺点:代码过于复杂化。

知悉


  1. RTRIM(c1,[,c2])
    【功能】删除右边出现的字符串
    【参数】C1 字符串
    c2 追加字符串,默认为空格
    【返回】字符型
    【示例】
    SQL> select RTRIM('gao qian jingXXXX','X') text from dual;
    text
    -----------------
    gao qian jing
    【相似】LTRIM()删除左边出现的字符串
    【相反】RPAD() 在列的右边粘贴字符
  2. 【0】在对应位置返回对应的字符,如果没有则以'0'填充. to_char(0.34,'9,9,9,0.​0.34';to_char(1234,'9999.00')='1234.00'; 注意事项:这是一个强制的符号,对应位没有,则以'o'填充,这是9很大不同地方 。
  3. 【9】在小数位,则表示转换为对应字符,如果没有则以0表示;在整数位,没有对应则不填充字符. to_char(123,'999.99')=123.00; TO_CHAR(123,'99999.9')=123.0; 注意事项:对于0和9而言,如果格式的位数不如数字的位数多,会返回'#'. 譬如to_char(12345,'9999')='#####' 。
  4. 【D】(ISO 小数位符号) '999D99' 这是"点号"的国际版本(ISO),作用等同于点号,也是只能出现一次.所不同的是,数据库会根据NLS_NUMERIC_CHARACTER的参数值来设置内容.默认的这个值是点号。
  5. 【FM】代表:删除如果是因9带来的空格,则删除之。

-------------------------------------------------------------------------------------------------------------------------

Oracle to_char函数的功能是将数值型或者日期型转化为字符型,下面就为您详细介绍Oracle to_char函数的使用,希望对您能有所帮助。

Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,int,float,numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成原始的数据类型。 
注意:所有格式化函数的第二个参数是用于转换的模板。

表 5-7. 格式化函数

函数 返回 描述 例子
to_char(timestamp, text) text 把 timestamp 转换成 string to_char(timestamp 'now','HH12:MI:SS')
to_char(int, text) text 把 int4/int8 转换成 string to_char(125, '999')
to_char(float, text) text 把 float4/float8 转换成 string to_char(125.8, '999D9')
to_char(numeric, text) text 把 numeric 转换成 string to_char(numeric '-125.8', '999D99S')
to_date(text, text) date 把 string 转换成 date to_date('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(text, text) date 把 string 转换成 timestamp to_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text) numeric 把 string 转换成 numeric to_number('12,454.8-', '99G999D9S')

表 5-8. 用于 date/time 转换的模板

模板 描述
HH 一天的小时数 (01-12)
HH12 一天的小时数 (01-12)
HH24 一天的小时数 (00-23)
MI 分钟 (00-59)
SS 秒 (00-59)
SSSS 午夜后的秒 (0-86399)
AM or A.M. or PM or P.M. 正午标识(大写)
am or a.m. or pm or p.m. 正午标识(小写)
Y,YYY 带逗号的年(4 和更多位)
YYYY 年(4和更多位)
YYY 年的后三位
YY 年的后两位
Y 年的最后一位
BC or B.C. or AD or A.D. 年标识(大写)
bc or b.c. or ad or a.d. 年标识(小写)
MONTH 全长大写月份名(9字符)
Month 全长混合大小写月份名(9字符)
month 全长小写月份名(9字符)
MON 大写缩写月份名(3字符)
Mon 缩写混合大小写月份名(3字符)
mon 小写缩写月份名(3字符)
MM 月份 (01-12)
DAY 全长大写日期名(9字符)
Day 全长混合大小写日期名(9字符)
day 全长小写日期名(9字符)
DY 缩写大写日期名(3字符)
Dy 缩写混合大小写日期名(3字符)
dy 缩写小写日期名(3字符)
DDD 一年里的日子(001-366)
DD 一个月里的日子(01-31)
D 一周里的日子(1-7;SUN=1)
W 一个月里的周数
WW 一年里的周数
CC 世纪(2 位)
J Julian 日期(自公元前4712年1月1日来的日期)
Q 季度
RM 罗马数字的月份(I-XII;I=JAN)-大写
rm 罗马数字的月份(I-XII;I=JAN)-小写

所有模板都都允许使用前缀和后缀修改器。模板里总是允许使用修改器。前缀 'FX' 只是一个全局修改器。

表 5-9. 用于日期/时间模板 to_char() 的后缀

后缀 描述 例子
FM 填充模式前缀 FMMonth
TH 大写顺序数后缀 DDTH
th 小写顺序数后缀 DDTH
FX 固定模式全局选项(见下面) FX Month DD Day
SP 拼写模式(还未实现) DDSP

用法须知:

  • 如果没有使用 FX 选项,to_timestamp 和 to_date 忽略空白。FX 必须做为模板里的第一个条目声明。
  • 反斜杠("\")必须用做双反斜杠("\\"),例如 '\\HH\\MI\\SS'。
  • 双引号('"')之间的字串被忽略并且不被分析。如果你想向输出写双引号,你必须在双引号前面放置一个双反斜杠('\\'),例如 '\\"YYYY Month\\"'。
  • to_char 支持不带前导双引号('"')的文本,但是在双引号之间的任何字串会被迅速处理并且还保证不会被当作模板关键字解释(例如:'"Hello Year: "YYYY')。

表 5-10. 用于 to_char(numeric) 的模板

模板 描述
9 带有指定位数的值
0 前导零的值
. (句点) 小数
, (逗号) 分组(千)分隔符
PR 尖括号内负值
S 带负号的负值(使用本地化)
L 货币符号(使用本地化)
D 小数点(使用本地化)
G 分组分隔符(使用本地化)
MI 在指明的位置的负号(如果数字 < 0)
PL 在指明的位置的正号(如果数字 > 0)
SG 在指明的位置的正/负号
RN 罗马数字(输入在 1 和 3999 之间)
TH or th 转换成序数
V 移动 n 位(小数)(参阅注解)
EEEE 科学记数。现在不支持。

用法须知:

  • 使用 'SG','PL' 或 'MI' 的带符号字并不附着在数字上面;例如,to_char(-12, 'S9999') 生成 ' -12',而 to_char(-12, 'MI9999') 生成 '- 12'。Oracle 里的实现不允许在 9 前面使用 MI,而是要求 9 在 MI前面。
  • PL,SG,和 TH 是 Postgres 扩展。
  • 9 表明一个与在 9 字串里面的一样的数字位数。如果没有可用的数字,那么使用一个空白(空格)。
  • TH 不转换小于零的值,也不转换小数。TH 是一个 Postgres 扩展。
  • V 方便地把输入值乘以 10^n,这里 n 是跟在 V 后面的数字。to_char 不支持把 V 与一个小数点绑在一起使用(例如. "99.9V99" 是不允许的)。

表 5-11. to_char 例子

输入 输出
to_char(now(),'Day, HH12:MI:SS') 'Tuesday , 05:39:18'
to_char(now(),'FMDay, HH12:MI:SS') 'Tuesday, 05:39:18'
to_char(-0.1,'99.99') ' -.10'
to_char(-0.1,'FM9.99') '-.1'
to_char(0.1,'0.9') ' 0.1'
to_char(12,'9990999.9') ' 0012.0'
to_char(12,'FM9990999.9') '0012'
to_char(485,'999') ' 485'
to_char(-485,'999') '-485'
to_char(485,'9 9 9') ' 4 8 5'
to_char(1485,'9,999') ' 1,485'
to_char(1485,'9G999') ' 1 485'
to_char(148.5,'999.999') ' 148.500'
to_char(148.5,'999D999') ' 148,500'
to_char(3148.5,'9G999D999') ' 3 148,500'
to_char(-485,'999S') '485-'
to_char(-485,'999MI') '485-'
to_char(485,'999MI') '485'
to_char(485,'PL999') '+485'
to_char(485,'SG999') '+485'
to_char(-485,'SG999') '-485'
to_char(-485,'9SG99') '4-85'
to_char(-485,'999PR') '<485>'
to_char(485,'L999') 'DM 485
to_char(485,'RN') ' CDLXXXV'
to_char(485,'FMRN') 'CDLXXXV'
to_char(5.2,'FMRN') V
to_char(482,'999th') ' 482nd'
to_char(485, '"Good number:"999') 'Good number: 485'
to_char(485.8,'"Pre-decimal:"999" Post-decimal:" .999') 'Pre-decimal: 485 Post-decimal: .800'
to_char(12,'99V999') ' 12000'
to_char(12.4,'99V999') ' 12400'
to_char(12.45, '99V9') ' 125'

Oracle to_char函数最简单的应用:

/*1.0123--->'1.0123'*/ 
Select TO_CHAR(1.0123) FROM DUAL 
/*123--->'123'*/ 
Select TO_CHAR(123) FROM DUAL

接下来再看看下面:

/*0.123 ---> '.123' */ 
SELEC TO_CHAR(0.123) FROM DUAL

上面的结果 '.123' 在大多数情况下都不是我们想要的结果,我们想要的应该是 '0.123'。

我们来看一下to_char函数的具体用法:

TO_CHAR ( n [, fmt [, 'nlsparam']] )

Oracle to_char函数将NUMBER类型的n按数值格式fmt转换成VARCHAR2类型的值。'nlsparams'指定由数值格式的元素返回的字符,包括:

.小数点字符
.组分隔符
.本地钱币符号
.国际钱币符号

变元的形式为:

'NLS_NUMERIC_CHARACTERS="dg" NLS_CURRENCY="tcxt" NLS_ISO_CURRENCY=territory'

其中d为小数点字符,g为组分隔符。

例 :TO_CHAR (17145,'L099G999','NLS_NUMERIC_CHARACTERS=".," NLS_CURRENCY="NUD"')=NUD017,145
通过上面的了解,再查看fmt的一些格式,我们可以用以下表达式得到'0.123'的值:

/*0.123 ---> ' 0.123' */ 
Select TO_CHAR(0.123,'0.999') FROM DUAL 
/*100.12 ---> '######' */ 
Select TO_CHAR(100.12,'0.999') FROM DUAL 
/*1.12 ---> ' 1.120' */ 
Select TO_CHAR(1.12,'0.999') FROM DUAL
' 0.123'是出来了,可是前面又多了一个空格。

对于 100.12 的值却是######,以及'1.12'的值变成了 '1.120'。

我们重新确定一个新的需求:

1、去空格
2、小数点最多4位,最少保留2位。

1--->'1.00';1.1--->'1.00';1.12-->'1.12';1.1234--->'1.1234';

1.12345--->'1.1235'

最终实现如下:

/* 
FM :除空格 
9999999.0099:允许小数点左边最大正数为7位,小数点右边最少2位,最多4位,且在第5位进行四舍五入 
*/ 
Select TO_CHAR(123.0233,'FM9999999.0099') FROM DUALv

Oracle rtrim、to_char函数格式化数字 小数Format展示,FM999990D99相关推荐

  1. oracle空格转换函数,ORACLE TO_CHAR函数格式化数字的出现空格的缘故

    ORACLE TO_CHAR函数格式化数字的出现空格的原因 在这篇博客SQL挑战--如何高效生成编码里面我由于需要将数字格式化为字符,像12需要格式化0012这样的字符,所以使用了TO_CHAR(数字 ...

  2. Oracle TO_CHAR函数格式化数字(以及小数点前0丢失问题)

    针对数字的常用格式化符 常用数字格式化符 参数 示例 说明 9 999 存在数字显示数字,不存在显示空格 0 000 存在数字显示数字,不存在显示0 . 99.99 指定位置返回小数点 , 999,9 ...

  3. Oracle中to_char()函数的用法

    Oracle中to_char()函数的用法 日期转换: to_char(date,'格式') select to_date('2005-01-01 ','yyyy-MM-dd') from dual; ...

  4. oracle to_char函数格式,oracle 中to_char函数的用法

    一.日期格式转换 to_char(date,'格式'); select to_date('2005-01-01 ','yyyy-MM-dd') from dual; select to_char(sy ...

  5. oracle 12c to_char 函数(1) 日期-字符串

    oracle 12c to_char 函数 日期-字符串 TO_CHAR 函数,数据转换为文字形式,如下图 TO_CHAR() 日期型到字符型 作用 to_char 中的参数为日期,可以将日期转为特定 ...

  6. mysql中可以用to_char函数吗_mySQL中 实现Oracle 的to_char函数

    mySQL中 实现Oracle 的to_char函数,应该可以实现80%的兼容 REPLACE函数是区分大小的 DROP FUNCTION IF EXISTS `to_char`; CREATE DE ...

  7. Oracle中to_char函数和MySQL中的str_to_date函数区别

    标题Oracle中to_char函数和MySQL中的str_to_date函数 1. str_to_date()----->相当于Oracle中的to_char(): 字符串转换为日期格式 (1 ...

  8. python函数格式化_Python通过format函数格式化显示值

    Python通过format函数格式化显示值,小数,小数点,转换成,科学,参数 Python通过format函数格式化显示值 易采站长站,站长之家为您整理了Python通过format函数格式化显示值 ...

  9. Oracle中to_char函数的速度问题

    oracle中用到比较时间的sql语句中,如果用to_char函数会影响sql执行的速度,原因待查找.

最新文章

  1. .NET 动态向Word文档添加数据
  2. [翻译]帮助文档-jQuery 选择器
  3. 计算机用于尖端科技,【判断题】用演绎法教问句的方法适用于中高级型学生
  4. 输出 100 万字、维护 3 个GitHub 项目,技术大佬的 2019 太燃了……
  5. 南京大学计算机科学与技术学费,南京大学计算机科学与技术系招生信息
  6. List 分页加载数据控制机制
  7. 服务器重装 pe,WinPE 下安装 Windows Server 2003 服务器
  8. 爬虫-发起post请求-稿件
  9. 整理的一些常用的CSS HACK
  10. UVA11349 Symmetric Matrix【数学】
  11. c语言运算优先级口诀简单,C语言运算符优先级口诀
  12. 非root用户安装或升级CUDA和CUDNN版本
  13. 信用卡业务愈卷愈烈,银行机构如何突围?
  14. NYOJ-845-无主之地1-2013年11月3日00:08:18
  15. on java读书笔记
  16. 孙陶然:成功者都不找借口
  17. 写出Java的第一个程序
  18. HTTP协议与网络编程(二)HTTP消息
  19. 微型计算机原理及应用背景,微型机原理及应用
  20. css如何让不自动换行,css实现强制不换行/自动换行/强制换行

热门文章

  1. awss3mysql_Amazon aws s3 加速
  2. 笔记本CPU低压和标压有什么区别?
  3. 现在你可以通过深度学习用别人的声音来说话了
  4. Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising
  5. 蜗牛—cocos2dx之初识
  6. Python项目:赛车
  7. android发送QQ邮件(带附件)
  8. Codeforces Round #800 (Div. 2) E. Keshi in Search of AmShZ
  9. 微信公众号小程序如何做流媒体视频直播?
  10. offsetLeft理解以及MouseEvent接口中的screenX,clientX,pageX,offsetX区别.