使用SQL将小数显示为分数

时间:2011-09-28 17:52:33

标签: sql oracle oracle10g

我需要为一些将返回比率的用户编写SELECT查询。涉及的数学只是两个数字的简单划分。但是,他们希望将比率表示为分数而不是小数。使用Oracle 10g在SQL中执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:9)

您可以在Oracle中定义一个函数来计算最大公约数(taken from here):

CREATE FUNCTION gcd (x INTEGER, y INTEGER) RETURN INTEGER AS
   ans INTEGER;
BEGIN
   IF (y <= x) AND (x MOD y = 0) THEN
      ans := y;
   ELSIF x < y THEN 
      ans := gcd(y, x);  -- Recursive call
   ELSE
      ans := gcd(y, x MOD y);  -- Recursive call
   END IF;
   RETURN ans;
END;

然后在SQL中使用该函数来连接分数字符串:

SELECT CAST(TRUNC(A / GCD(A, B)) AS VARCHAR2(10)) 
       || ' / ' || 
       CAST(TRUNC(B / GCD(A, B)) AS VARCHAR2(10)) AS FRACTION FROM TABLE