oracle round 转 String

最近业务有个需求变更,将一个字段的元变更为万,但是为了不变更历史数据,需要在维护和查询的时候进行变更。
该字段在数据库中字段为Number(9),在实体类中为String。

过程中犯了几错问题,进行记录
1、第一次sql的时候直接进行了转换,未考虑到转String问题
SELECT round(12100/10000,2) from dual;
这个时候数据库中的结果为:
这里写图片描述
但是页面端的显示为:”.21
是因为number->String时出现了问题,于是对sql进行了变更
2、第二次sql
select to_char(round(1000/10000,2),’fm99990.00’) from dual;
这个格式化含义说明:
“fm”:删除因为9带来的空格
“9”:如果匹配到数字,原样展示,未匹配到,作为空格
“0”:如果匹配到数字,原样展示,未匹配到,展示0
小数点前的展示要为0,这样.21的情况不会存在,可以保证小数点前有数据。
这里写图片描述
3、这样的展示,测试经过测试以后,表示这是有问题的,本身进入数据100(万),但是展示结果变成了100.00(万),这样视觉效果并不好,应当是页面端输入多少,你展示多少,不能统一而论的处理。
于是,进行了第三次变动:
select decode(
substr(
TO_CHAR(ROUND(10000/10000,2),’fm99990.99’),
instr(TO_CHAR(ROUND(10000/10000,2),’fm99990.99’),’.’)
),
‘.’,
substr(
TO_CHAR(ROUND(10000/10000,2),’fm99990.99’),
1,
instr(TO_CHAR(ROUND(10000/10000,2),’fm99990.99’),’.’)-1
),
TO_CHAR(ROUND(10000/10000,2),’fm99990.99’)
) from dual;
这个sql比较之前的一下长了不少,但是含义其实很简单,

而上面集数的含义即为:
decode(
从小数点向后截取,
如果仅为小数点,
取从头到小数点前的一位,
其它的取原值
)
调整一下格式化,将后缀的.00->.99
这样数据就会出现 x. 这样的数据,例如10000/10000,结果就是:1.
调整目的是为了将.00换成->x.这样的数据清除掉,不调整的话也是可以的,将decode中的条件’.’进行对应变更即可。

上面的sql过于繁杂,所以进行了sql调整,调整如下:

SELECT
regexp_replace(
TO_CHAR(ROUND(10000/10000,2),’fm99990.99’),
‘\d+.$’,
TO_CHAR(ROUND(10000/10000,2),’fm99990’)
)
FROM
dual;

regexp_replace函数的作用就不再描述,修正sql的描述含义如下:
regexp_replace(元转成万后的值,匹配正则的值,匹配到以后替换的值)
其中\d+.$的含义为:数字打头,以.结尾,
因为格式化用的是.99,所以只会出现x.的形式需要处理,按照整数处理即可,其它情况我们原样输出即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值