• Hi,

    You might like to consider using Euclid's Algorithm to find the Highest Common Factor (Greatest Common Divisor)

    CREATE FUNCTION CalculateRatio(@numerator int, @denominator int)

    RETURNS nvarchar(max)

    AS

    BEGIN

    declare @ratio nvarchar(max)

    declare @greatestcommondivisor int

    declare @x int

    declare @y int

    set @x = @numerator

    set @y = @denominator

    declare @Tmp int

    if (@denominator > 0)

    begin

    while (@x > 0)

    begin

    if @x < @y begin

    set @Tmp = @x

    set @x = @y

    set @y = @Tmp

    end

    set @x = @x % @y

    end

    end

    set @greatestcommondivisor = @y

    if (@numerator = 0 or @denominator = 0 or @greatestcommondivisor = 1)

    begin

    set @ratio = convert(nvarchar(max), @numerator) + ':' + convert(nvarchar(max), @denominator)

    end

    else

    begin

    set @ratio = convert(nvarchar(max), @numerator/@greatestcommondivisor) + ':' + convert(nvarchar(max), @denominator/@greatestcommondivisor)

    end

    return @ratio

    END

    It returns a result faster than the original (even being lazy and using nvarchar(max)), much faster for larger numbers

    cheers