2009-06-12 3 views
9
의 큰 돌아갑니다

가능한 중복 :
Is there a Max function in SQL Server that takes two values like Math.Max in .NET?T-SQL의 상응하는 두 숫자

Excel에서

, 숫자를 받아 "MAX"라는 함수가있다 세트에서 가장 큰 것을 리턴합니다. 이 기능을 복제하는 T-SQL의 함수가 있습니까? 나는 그것을 찾을 수 없었고, 나를 위해 그것을하는 UDF를 작성했지만, 나는 그것이 가치가 있다고 생각했다. 여기

내가 사용했던 기능입니다 : 내가 어떤 행운을 기대하지 않는다

CREATE FUNCTION dbo.LargerOf 
(
    -- Add the parameters for the function here 
    @First FLOAT, 
    @Second FLOAT 
) 
RETURNS FLOAT 
AS 
BEGIN 

    DECLARE @Result FLOAT 

    IF @First > @Second 
     SET @result = @First 
    ELSE 
     SET @Result = @Second 

    RETURN @Result 

END 
GO 

, 대신 새로운 서버의 전체 무리 내 기능을 이동하는, 나는 적어도 거라 생각 청하다. 감사!

+0

당신은 실제로 MySQL은/​​오라클 기능 GREATEST의 TSQL 상당합니다. 저장 프로 시저 이외의 다른 것을 모르는 : ( –

+0

) 실제로, 정확히 내가 원하는 것입니다. 해당 함수 이름을 사용하여 검색하면 다시 운이 없다는 것을 재확인합니다. 감사합니다! – SqlRyan

답변

10

당신이 필요로하는 기능이있는 경우 나도 몰라,하지만 해결 방법은, 내가 좋아하는이 하나 더

set @max = case when @first > @second then @first else @second end 
+0

처음에이 작업을 수행했지만 그때 나는 그것을 끊임없이 사용해야했기 때문에 (나는 끊임없이 그것을 사용해야했다) 피곤했고 본질적으로 위의 코드 인 UDF로 포장하기로 결정했다. 제안을 주셔서 감사합니다! – SqlRyan

+0

어쨌든 UDF :-) – tekBlues

+2

이 작업에는 UDF를 사용할 때주의하십시오. 때로는 단순히 UDF에 코드를 캡슐화하면 SQL Server가 행 단위로 결과 집합을 처리해야하기 때문에 성능 문제가 발생할 수 있지만 일반적으로 기본 제공 함수는 집합 기반으로 사용할 수 있습니다. –

4

당신은 사용할 수 있습니다

CASE 
    WHEN @First >= @Second THEN @FIRST 
    ELSE @Second 
END 
+0

두 개의 서로 다른 질문 페이지에 걸쳐 제가 점검 한 바에 따르면 귀하의 솔루션은 가장 짧고, 가장 논리적이며, 구현하기가 가장 쉽습니다.수백 기가비트 데이터의 성능에 대해서는 언급 할 수 없지만 필자가 필요로하는 곳에서는 확실히 트릭을 수행합니다. 이 접근법이 너무 장황하다면 SQL의 '구조화 된'측면을 받아 들일 필요가 있습니다. –

1

을 불행하게도 없습니다.

매우 집중적 인 사용에 대한 경고의 말씀, 나는 (심지어 당신처럼 쉽게 CASE로 인라인 될 수있는 사람) 라 함수 정말 는 그래서 만약, SQL Server 2005를 잘 수행하지 않는 것으로 나타났습니다 당신은 수백만 건의 전화를 처리하고 있습니다. (인라인 TVF를 가짜로 만들 수 있습니다.)

SQL Server에는 궁극적으로 인라인 SVF가 있거나 GREATEST과 같은 기능이 있습니다.

4

가 선택한 제 = 45 @ 제 @ = 123

선택 맥스 (a) (ALL 선택 조합을 @first 선택 @second)로부터

을 X 선언한다 @first INT, @second INT 에서

- 또는

선택 최대의 (a) (값은 (@first), (초) @) × (A)

+1

복잡한 계산 및 상수의 최대 값 또는 최소값이 필요하기 때문에 UNION을 사용하여 이렇게하는 것이 좋습니다. 계산을 한 번 쓴다. 더 깨끗한 코드를 만듭니다. – John

관련 문제