【问题标题】:PLSQL Function return value before decimal pointPLSQL函数返回小数点前的值
【发布时间】:2012-11-25 20:24:17
【问题描述】:

我有一个函数可以返回一个人的年龄,如果他们已经去世,则返回“已故”。因为它返回一个数字或 Deceased,所以 RETURN 是一个 VARCHAR2。

返回年龄时,它会返回如下值:72.93541936015413085912743681395289882628。有没有办法改变变量中的值只返回小数点前的字符?

谢谢

【问题讨论】:

标签: oracle function plsql


【解决方案1】:

将其转换为数字:

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

【讨论】:

  • @koopajah 它将起作用:Oracle 将尝试将字符串转换为一个数字,roundfloor 或任何将对其进行操作的数字,当它被放回 varchar2 时,甲骨文将其退回。只需要一些逻辑来绕过“已故”值。
  • 感谢您的帮助。出于某种原因,我无法使用演员阵容使其正常工作,但是其余部分使用您的想法我解决了这个问题: SELECT to_number(age) INTO v_number from dual; SELECT floor(v_number) into age from dual;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
相关资源
最近更新 更多