栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有填充模式的Oracle to_char格式编号(FM0000)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有填充模式的Oracle to_char格式编号(FM0000)

您的格式模型仍然必须允许该值的符号。没有办法表明

TO_CHAr()
它永远不会为负(如果实际上是您的值的情况)。即使使用4位数字,格式也允许五个字符,如您从列标题中所看到的:

SQL> SELECt TO_CHAr(1234, 'FM0000') FROM DUAL;TO_CH-----1234

请注意,列标题是

TO_CH
,这是五个字符,而不是四个字符。如果您有一个负数(如弗洛林建议),则需要额外的空间:

SQL> SELECt TO_CHAr(-1234, 'FM0000') FROM DUAL;TO_CH------1234

没有

FM
修饰符,您将在返回的字符串中得到一个正数的前导空格,所以
LENGTH(TO_CHAr(1234,'0000'))
正数为5,但是
LENGTH(TO_CHAr(1234,'FM0000'))
为4,因为前导空格(通常使列中的值右对齐)被抑制。如果值为负,则返回的字符串的长度均为5。格式模型确定返回的数据类型
varchar2(5)

允许 使用符号,即使您知道永远不会出现负值-格式模型也无法通过任何方式反映这一点。

如果您强制显示符号,您也可以看到它带有正值:

SQL> SELECt TO_CHAr(1234, 'FMS0000') FROM DUAL;TO_CH-----+1234

您在

TO_CHAR
通话中无能为力。作为
RPAD
解决方法的替代方法,您可以
SUBSTR
用来仅获取格式化字符串的最后四个字符:

SQL> SELECt SUBSTr(TO_CHAr(12345, 'FM0000'), -4) FROM DUALSUBSTr(TO_CHAr(1----------------####

但是,如果您确实有负值,那么您将失去符号:

SQL> SELECt SUBSTr(TO_CHAr(-1234, 'FM0000'), -4) FROM DUALSUBSTr(TO_CHAr(-----------------1234

使用您的RPAD,您可以保留符号,但会丢失第四个有效数字:

SQL> SELECt RPAD(TO_CHAr(-1234, 'FM0000'), 4) FROM DUALRPAD(TO_CHAr(-12-----------------123

这也不是很好。您可能不必处理负数;但是,如果您要处理的数字大于预期的数字(即,当您期望的数字仅为<= 9999时,得到的数字> =
10000),那么我不确定您是否可以确定不会看到(无效的数字? )也为负数。无论如何,这似乎是一个数据问题,而不是格式问题。


根据您对Ollie的评论,另一种可能对代码的未来维护者更明确和明显的方法是在CASE中将其说明:

SELECt CASE WHEN n BETWEEN 0 AND 9999 THEN TO_CHAr(n, 'FM0000') ELSE '####' END FROM DUAL

如果需要,还可以使字符串列保留为空或使用其他不可思议的值,而不是

####

修剪值(也 可能 更清楚)的另一种方法是使用CAST:

SQL> SELECt CAST(TO_CHAr(12345, 'FM0000') AS VARCHAr2(4)) FROM DUAL;CAST----####


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号