SQL Server에서 오라클의 NVL 대체 함수
MS SQL Server 2011. 10. 21. 11:46
오라클에서 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 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)