SQL Server에서 오라클의 NVL 대체 함수


오라클에서 NVL(값1, 값2) 하게 되면 값1이 NULL일 경우 값2를 반환해주죠.
MS SQL Server에도 ISNULL(값1, 값2) 함수를 이용해서 동일한 결과를 나타낼 수 있습니다.

하지만 단순히 NULL뿐만 아니라 ''값도 체크해야 할 경우가 있습니다.
그럴때는 아래 함수를 SQL Server에 생성해놓고 사용하면 됩니다.

CREATE FUNCTION [dbo].[UF_NVL]
(
    @val1 sql_variant,   -- codelist1 의 코드값
    @val2 sql_variant   -- codelist2 의 코드값
)

RETURNS sql_variant
AS
BEGIN

    DECLARE @temp sql_variant 

    IF (@val1 is NULL) OR (@val1 = '')
        SELECT @temp = @val2
    ELSE
        SELECT @temp = @val1

    RETURN @temp

END


@val1이 null이거나 ''일 경우 @val2를 리턴하고, 아니면 @val1을 리턴하는 함수입니다.

예제
SELECT dbo.UF_NVL('연잎', '개구리밥')          결과 : 연잎
SELECT dbo.UF_NVL(null, '다람쥐')               결과 : 다람쥐
SELECT dbo.UF_NVL('', '송아지')                   결과 : 송아지

무슨 차이인지 아시겠죠?

 

추가
조회조건에서 사용할 경우 예제
SELECT a.*
    FROM dbo.table a
  WHERE a.usernm = dbo.UF_NVL(@param1, a.usernm)
      AND a.usergroup = dbo.UF_NVL(@param2, a.usergroup)