인수가 NULL이면 다른 인수 중 최소의 것을 취하려고합니다. 모든 인수가 NULL이면 NULL을 리턴하려고합니다.
나는 두 개의 인수를 위해 이런 일을 사용할 수 있습니다 :
LEAST(NVL(colA,colB), NVL(colB,colA))
그것은 비록>이 개 인수 추악한 얻기 시작 :
LEAST(COALESCE(colA,colB,colC)
,COALESCE(colB,colA,colC)
,COALESCE(colC,colA,colB))
하는 시점에서 마법 값을 고려 시작 했죠; 하지만이 버그를 할 수있다 (예를 들어, 어떤 값 중 하나가 합법적으로 마법 값 경우?) :
SELECT CASE WHEN r = maxv THEN NULL ELSE r END AS result
FROM (SELECT LEAST(NVL(:colA,maxv)
,NVL(:colB,maxv)
,NVL(:colC,maxv)) AS r, maxv
FROM (SELECT 9.999999999999999999999999999999999999999e125
AS maxv FROM DUAL));
감사 @tenfour을, 나는 NULL을했을 것이다 일부는 여러 결과를 비교했다. 병합하여 내 문제를 해결했습니다. –
LEAST는 적어도 2 개의 매개 변수로 항상 호출되어야합니다. 그렇지 않으면 쓸모가 없습니다. 초기 예제는 초보자에게 혼동을 줄 수 있습니다. 또한, 모든 인수가 NULL이면 NULL 대신에'12345' (또는 당신이 사용하는 임의의 큰 숫자)를 반환하는 것은 기다리고있는 버그입니다, IMHO. –
동의합니다. 실제로 당신이 세트에 대해 이런 종류의 제어를 원한다면 아마도 서브 쿼리를 인수 분해하여 사용하는 것이 좋을 것입니다. 그러면 논리가 훨씬 더 정상적으로됩니다. – tenfour