2012-12-07 32 views
0

我有一个函数返回一个人的年龄或'已死亡',如果他们已经死亡。因为它返回一个数字或死亡,RETURN是一个VARCHAR2。PLSQL函数返回小数点前的值

返回一个年龄时,它将返回如下值:72.93541936015413085912743681395289882628。无论如何改变变量内的值只返回小数点前的字符?

感谢

+0

您可以使用SUBSTR()和INSTR()的组合,如下所示:http://stackoverflow.com/a/4389623/1606729 – koopajah

回答

2

投它作为一个数量:

floor(cast(column as float)) 

将圆下来

ceil(cast(column as float)) 

将圆起来

round(cast(column as float)) 

将圆其

,如果你不得不把它送回来作为一个字符串,将它转换回

cast(round(cast(column as float)) as varchar2(50)) 

,但您可能需要检查“死者”的值,所以使用的情况下:

select retVal = 
case column 
when 'deceased' then 'deceased' -- pushing up daisies 
else cast(round(cast(column as float)) as varchar2(50)) --alive and kicking 
end 
+0

这将不起作用,结果是类型VARCHAR2 – koopajah

+0

@koopajah它将工作: Oracle会尝试将这个字符串转换成一个数字,这个数字是'round','floor'或者任何可以操作的数字,当它被放回'varchar 2',甲骨文将把它投回。只需要有一些逻辑来解决“死亡”的价值。 – Xophmeister

+0

感谢您的帮助。由于某种原因,我无法使用演员工作,但使用您的想法为其余的我用它解决了这个问题: SELECT to_number(age)INTO v_number from dual; 从双重选择楼层(v_number)到年龄; – ToniHopkins