很多时候,我们对查出来的数字希望数字位数能保持一致,如数据库里面某字段存的数据是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位我想我只能通过程序来实现了,呵呵。