| 发表于:2007-12-12 17:38:449楼 得分:0 |
写了一个function ,应该可以满足你的要求 db2 drop function formatnumber db2 -td@ -vf formatnumber.db2 db2 values formatnumber(1234567) 运行例子: d:\db2\samples\my> db2 values formatnumber(1234567) 1 -------------------------------------------------- 1,234,567.00 1 条记录已选择。 d:\db2\samples\my> db2 values formatnumber(1234567890123.123) 1 -------------------------------------------------- 1,234,567,890,123.12 1 条记录已选择。 create function formatnumber(data decimal(20,2)) language sql returns varchar(50) begin atomic declare sreturn varchar(50) default ''; declare datastr varchar(50) default ''; declare stemp varchar(30); declare datadecimal varchar(15); declare datainteger varchar(15); declare kcount int; declare klength int; declare k int default 1; declare num int; declare loops int default 1; declare is_zero int default 1; set stemp = char(data); --去掉decimal 转为字符串的开头的0 set kcount = length(stemp); while k <=kcount do if (substr(stemp,k,1) ='0' and is_zero=1) then set datastr = datastr ¦ ¦''; else set datastr = datastr ¦ ¦substr(stemp,k,1); set is_zero =0; end if; set k=k+1; end while; --取整数部分和小数部分 set datainteger = substr(datastr,1,locate('.',datastr)-1); set datadecimal = substr(datastr,locate('.',datastr)); set kcount = length(datainteger); if mod(kcount,3) = 0 then set klength = kcount/3; else set klength = kcount/3+1; end if; while klength> 0 do set klength = klength-1; set num = kcount-3*loops+1; if num> 0 then if (klength =0 and mod(kcount,3) = 0) then set sreturn = substr(datainteger,num,3) ¦ ¦sreturn; else set sreturn = ',' ¦ ¦substr(datainteger,num,3) ¦ ¦sreturn; end if; else set sreturn = substr(datainteger,1,mod(kcount,3)) ¦ ¦sreturn; end if; set loops =loops+1; end while; set sreturn = sreturn ¦ ¦ datadecimal; return sreturn; end@ | | |
|