2016-05-15 29 views
0

我在创建一个匿名PL/SQL代码时出现问题,该代码应该打印出名称,姓氏和年龄为1的小数(而不是sysdate,我使用01-SEP-04 ddmonyyyy)一张桌子。我遇到的问题是年龄。这是我想出迄今:PLSQL计算和表中的month_between

set serveroutput on 

declare cursor 
    car_owner is select firstN, lastN, trunc(months_between(date '2004-09-01', to_date('19' || substr(pnr, 1,6), 'yyyymmdd')))/12 
from carowners; 

b_first carowners.firstN%type; 
b_last carowners.lastN%type; 
age number (3,1); 

begin 
if not car_owner%isopen 
    then open car_owner; 
end if; 

loop 
fetch car_owner into b_first, b_last, age; 

exit when car_owner%notfound; 

dbms_output.put_line (initcap(b_first || ', ' || b_last) || ', ' || age ||' years old'); 

     end loop; 
     close car_owner; 

end; 

的输出中我得到的是这样的:

马丁,VARG,55.4年老
肯尼,绿50.6岁
托尼, Zawicki,39岁
Shawon,哈桑33.3岁
萨迪克,诺维茨基35.4岁
简,罗伯茨45.3岁
特里,Mcfield 43.4岁
恶意,Vanzi 23.4岁

什么即时寻找的是类似这样的输出:

马丁,VARG,55,6岁
肯尼,绿色,50,7年老
托尼,Zawicki,39,1岁
Shawon,哈桑,33,4岁
萨迪克,诺维茨基,35,6岁
简·罗伯茨,45,5岁
TERR Y,Mcfield,43,6岁
恶意,Vanzi,23,5岁

注意,我需要一个逗号和小数点右边...

感谢所有的建议和帮助!

+0

如何从55.4到55.6或50.6 50.7?这不仅仅是小数点的替代。 –

回答

0

您可以使用国际化将小数点设置为commma。在文档中开始here

但是,对于一次性的解决方案,我只想替换age有:

trim(replace(to_char(age, '999.9'), '.', ',')) 
+0

这将起作用,但首先你必须在年龄前做一个ceil()到小数点后第一位。 –