db2中各个类型互相转换处理

给数字左侧自动占位补零

  • digits函数:digits(参数)

digits里的参数必须是整型参数,可以是smallint,int,bigint,decimal,其中smallint占5位,int占10位,bigint占19位。decimal默认为5位,最多为31位可以表示为decimal(31)。也就说digits参数能够容纳的数字最多为31位,通常digits在参数不足10位的时候自动补零补齐到10位,等于10位的时候就返回10位,大于10位而小于19位的时候就自动补零补齐到19位,等于大于19位且小于31位的时候数字原封不动地返回不再自动补零。

-- 0000000003 10位
select digits(3) from dual;
-- 0000000000000000003 19位
select digits(cast(3 as bigint)) from dual;
-- 00003 5位
select digits(cast(3 as smallint)) from dual;
-- 0000000000000000000000000000003 31位
select digits(cast(3 as decimal(31))) from dual;

  • 更常用的 自定义补零位数:digits(数字,截取位数)

-- 结果:03
select right(digits(3),2) from dual;
-- 结果:00000003 8位
select right(digits(3),8) from dual;
-- 通过cast函数将参数转换为适合的delcimal类型
-- 结果:0000000000000000000003 22位
select right(digits(cast(3 as decimal(22))),22) from dual;

查看字符串长度

-- 查看字符串长度 结果:4
values length('1322');

字符串与数字类型相互转换

digits函数返回一个代表数字的字符串。参数必须是一个表达式 ,返回整形,samllint,integer,bigint or decimal.如果参数可能是空的,结果也可能是空的。如果参数是空的 ,结果肯定是空的。
函数的返回值是没有考虑参数的规格代表他的绝对值的固定长度的字符串,返回值不包括符号或者小数字符。 相反 他包括数字,如有必要 前导为零来填充。

-- 结果:3.4512432
values CHAR(3.4512432);
-- 结果:34512432
values digits(3.4512432);
-- 结果:3.14
values char(cast(3.14574 as decimal(8,2)));

-- 结果:4
values integer(trim('4.12313'));
-- 结果:5
values integer(trim('5'));
-- 结果:4
values cast(char('4.12313') as bigint);
-- 结果:4.12
values cast('4.12313' as decimal(8,2));
-- 结果:4.12313
values cast('4.12313' as double);
-- 结果:4.12
values cast(char(cast('4.12313' as decimal(8,2))) as double );

原文地址:https://www.cnblogs.com/Rainbow-sea/p/14309291.html