截取数值某个位数上的值放到相应的单元格中

有些客户在做表的时候,会统计一些金额,然后将这些金额每一个位数(即个,十,百)上的值对应的填充到一个表格中去,如下图:

那么这种效果如何实现呢?

结合使用三个函数:if(),mid(),pos()可实现上图效果。

样例:

报表设计如下图:

A1=ds1.select(value,false)

B2: =if(pos(A1,”.”)-5<0,”",mid(A1,pos(A1,”.”)-5,pos(A1,”.”)-4))

C2: =if(pos(A1,”.”)-4<0,”",mid(A1,pos(A1,”.”)-4,pos(A1,”.”)-3))

D2: =if(pos(A1,”.”)-3<0,”",mid(A1,pos(A1,”.”)-3,pos(A1,”.”)-2))

E2: =if(pos(A1,”.”)-2<0,”",mid(A1,pos(A1,”.”)-2,pos(A1,”.”)-1))

F2: =if(pos(A1,”.”)-1<0,”",mid(A1,pos(A1,”.”)-1,pos(A1,”.”)))

G2: =if(pos(A1,”.”)+1==0,”0″,mid(A1,pos(A1,”.”)+1,pos(A1,”.”)+2))

H2: =if(pos(A1,”.”)+2==0,”0″,mid(A1,pos(A1,”.”)+2,pos(A1,”.”)+3))

B2中内容详解:

Pos(A1,”.”):取到小数点在这个字符串中位于第几位,默认从0开始计算。

if(pos(A1,”.”)-5<0:由于万位是位于小数点往前排5位,如果没有pos(A1,”.”)-5小于0,则说明该数值在万位上没有值,不是一个万位数。则单元格显示为空。

mid(A1,pos(A1,”.”)-5,pos(A1,”.”)-4):万位上有值的时候,截取到这个万位的值,显示到单元格中。

C2F2格子中内容的意思都一样。

 

G2H2中为什么分别是加1和加2呢?

因为十分位和百分位上的值是排在小数点之后的,所以取得小数点位数之后,要往后推。

有两点需要注意的地方:

1. 如果数据库中的数据是number(20,2)的格式,且有这种数据:100.00,那么在数据库中查询的结果是100.00,但是将这种数据放到单元格中来之后会变成100.所以这个需要在SQL语句中做一个保留小数位的操作,做法如下:

Select to_char(value,’fm9999999999999.00’) from table .

to_char(value,’fm9999999999999.00’):保留两位小数

to_char(value,’fm9999999999999.000’):保留三位小数

2.如果数据库中存的就是100这种数据,没有保留小数位。那么以上方法并不适用。

热门文章