2011-09-28 50 views
1

我需要爲某些用戶編寫一個SELECT查詢來返回比率。涉及的數學只是兩個數的簡單劃分。但是,他們希望將比率表示爲小數而不是小數。使用Oracle 10g在SQL中執行此操作的最佳方法是什麼?使用SQL顯示小數爲分數

+6

是'4/8'確定還是需要簡化爲'1/2'? –

+1

這個比例如何存儲? (即:你有分母和分子嗎?) – NullUserException

+0

分數需要簡化,馬克。 – indiguy

回答

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 
+2

另請參閱:http://en.wikipedia.org/wiki/Euclidean_algorithm – NullUserException