使用SQL将小数显示为分数
我需要为一些用户编写一个SELECT查询,它将返回一个比率。所涉及的数学只是两个数字的简单除法。但是,他们希望将比率表示为分数,而不是小数。使用Oracle 10g在SQL中执行此操作的最佳方法是什么?您可以在Oracle中定义一个函数来计算最大公约数():使用SQL将小数显示为分数,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我需要为一些用户编写一个SELECT查询,它将返回一个比率。所涉及的数学只是两个数字的简单除法。但是,他们希望将比率表示为分数,而不是小数。使用Oracle 10g在SQL中执行此操作的最佳方法是什么?您可以在Oracle中定义一个函数来计算最大公约数(): 您可以在Oracle中定义一个函数来计算最大公约数(): 4/8正常还是需要简化为1/2?该比率是如何存储的?(即:你有分母和分子吗?)分数需要简化,马克。分子和分母都存储在单独的字段中。我的查询只需要拉取它们并计算比率。4/8可以吗?还是
您可以在Oracle中定义一个函数来计算最大公约数():
4/8
正常还是需要简化为1/2
?该比率是如何存储的?(即:你有分母和分子吗?)分数需要简化,马克。分子和分母都存储在单独的字段中。我的查询只需要拉取它们并计算比率。4/8
可以吗?还是需要简化为1/2
?这个比率是如何存储的?(即:你有分母和分子吗?)分数需要简化,马克。分子和分母都存储在单独的字段中。我的查询只需要拉取它们并计算比率。
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;
SELECT CAST(TRUNC(A / GCD(A, B)) AS VARCHAR2(10))
|| ' / ' ||
CAST(TRUNC(B / GCD(A, B)) AS VARCHAR2(10)) AS FRACTION FROM TABLE