如何将decimal型的转换为char型的数据前面的0去掉?

[复制链接]
查看11 | 回复9 | 2016-2-2 09:36:33 | 显示全部楼层 |阅读模式
临时表session.tmp_result(bal_amt decimal(17,4))
保存了一组数据,比如 2000.3422,32000.2345 等等
转换为 char(bal_amt)存入另外一个表里 char(30) , 发现原来的数据左边都被补零了,像...000002000.3422 ,怎样才能把补的0给去掉?
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
cast(5.5656 as char(4)),得到的结果5.56,可以取得定长的字符,不过你说的问题解决不了,把char(30),改成varchar(30)试试吧,估计也不行。
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
自己写个函数吧,可以借助replace。
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
如果用函数 我只想到 substr 一点点循环下去
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
用replace的话,能不能之前把decimal转换为char的时候前面不补0,补上别的字符如A这样 replace(char(decimal(17,4)) ,'A','')岂不是更方便,但我不知道怎么转换是前面补自己定义的字符
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
给个例子
db2 "drop table test"

db2 "create table test (c1 decimal(8,3))"

db2 "insert intotest values (0.11),(1.01), (10.110), (101.01),1001.001)"

db2 "select * from test"



db2-x "select c1,rtrim(char(bigint(c1)))||'.'||translate(rtrim(translate((right(char(c1),4)),' ','0')),'0',' ') from test"
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
明白了
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
不错,又学到新东西了:)
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
解决方案
测试1:
values TRIM(REPLACE(strip(replace(char(12.23), '0.', '#'),B,'0'),'#','0.'));
RESULT:'12.23'
测试2:
values TRIM(REPLACE(strip(replace(char(1200.23), '0.', '#'),B,'0'),'#','0.'));
RESULT:'1200.23'
测试3:
values TRIM(REPLACE(strip(replace(char(0.23), '0.', '#'),B,'0'),'#','0.'));
RESULT:'0.23'
结论:此方法OK!
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
时间证明,DBA是每天都在进步的。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行