DB2中通过sql给数字自动补零方法

原文地址如下:

 http://www.joymood.cn/posts/2011/08/505.html

 

很多时候,我们对查出来的数字希望数字位数能保持一致,如数据库里面某字段存的数据是2,3,4,10,11这样的格式,我们希望通过sql语句查出来的这个字段数字格式为02,03,04,10,11,显然对于只有1位数的不好处理,要采取自动补零的方法才行。下面就说下在DB2数据库里怎么通过sql语句来达到我们需要的目的:
其中用到了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位的时候数字原封不动地返回不再自动补零。
即我们通过语句:
select digits(3) from TEST
查出来得结果会是:0000000003
通过
select  digits(cast(3 as bigint))  from TEST
查出来得结果会是:0000000000000000003
通过
select  digits(cast(3 as smallint))  from TEST
查出来得结果会是:00003
通过
select  digits(cast(3 as delcimal(31)))  from TEST
查出来得结果会是:0000000000000000000000000000003

好了 看到这里,我们会想到我们要自定义数字的位数来采取自动补零,那该怎么办,那应该很快的想到用right函数来截取我们所需要

的位数,于是就有了以下语句:
如最开始讲的最多只需要两位就好了:
select right(digits(3),2)  from TEST
这样得到的结果将是:03
当然如果字段里的数字本来为2位数那就还是不变了。
这里要注意,数字等于多出19位需自动补零的话就要通过cast函数将参数转换为适合的delcimal类型了,不然如
select right(digits(123456789123456789123),22)  from TEST
本应该需要补一个0的,但结果是原封不动的返回来了,这里我们就需要更改为:
select right(digits(cast(123456789123456789123 as decimal(22))),22)  from TEST
这样就会获取我们需要的了。
大于31位的数字还要通过sql查询来自动补零就没办法用这个方法了,也许有其他方法,还没想到,请朋友们补上,碰到大于31位我想我只能通过程序来实现了,呵呵。

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值