Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL将小数显示为分数_Sql_Oracle_Oracle10g - Fatal编程技术网

使用SQL将小数显示为分数

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

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

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


您可以在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