본문 바로가기

DB/mssql

(String Concatenation) (Transact-SQL) 예외 케이스



    SELECT rat.TargetNo
         , rat.TargetUniqueNo
         , rat.RegistType
         , rat.AddressType
         , (CASE WHEN rat.Sido LIKE '서울%' THEN '서울특별시'
                    WHEN rat.Sido LIKE '부산%' THEN '부산광역시'
                    WHEN rat.Sido LIKE '울산%' THEN '울산광역시'
                    WHEN rat.Sido LIKE '대전%' THEN '대전광역시'
                    WHEN rat.Sido LIKE '대구%' THEN '대구광역시'
                    WHEN rat.Sido LIKE '광주%' AND rat.Sido != '광주시' THEN '광주광역시'
                    WHEN rat.Sido LIKE '인천%' THEN '인천광역시'
                    WHEN rat.Sido LIKE '경기%' THEN '경기도'
                    WHEN rat.Sido LIKE '강원%' THEN '강원도'
                    WHEN rat.Sido LIKE '충남%' THEN '충청남도'
                    WHEN rat.Sido LIKE '충북%' THEN '충청북도'
                    WHEN rat.Sido LIKE '경남%' THEN '경상남도'
                    WHEN rat.Sido LIKE '경북%' THEN '경상북도'
                    WHEN rat.Sido LIKE '전남%' THEN '전라남도'
                    WHEN rat.Sido LIKE '전북%' THEN '전라북도'
                    WHEN rat.Sido LIKE '제주%' AND rat.Sido <> '제주시' THEN '제주특별자치도'
                    WHEN rat.Sido LIKE '세종%' THEN '세종특별자치시'
                    WHEN rat.Sido LIKE '%[남도|북도]' THEN rat.Sido
                    ELSE NULL END ) AS Sido
         , rat.DongRi
         , rat.Jibun
         , rat.BuildingName
         , rat.BuildingNameUseYn
         , rat.JibunUseYn
         , ( CASE WHEN LEN(rat.BuildingDong) > 0 THEN rat.BuildingDong + '동' ELSE null END ) AS BuildingDong
         , ( CASE WHEN LEN(rat.BuildingHo) > 0 THEN rat.BuildingHo + '호' ELSE null END ) AS BuildingHo
         , rat.BuildingDongHoUseYn
         , rat.BuildingHoUseYn
         , rat.BuildingDongUseYn
         , ( rat.Sido + N' ' + rat.DongRi + N' ' + 
                ( CASE WHEN rat.RegistType <> N'집합건물' THEN rat.Jibun 
                       WHEN rat.JibunUseYn = 'Y' THEN  rat.Jibun 
                       WHEN rat.BuildingNameUseYn = 'Y' THEN  rat.BuildingName ELSE '' END ) + 
                ( CASE WHEN rat.BuildingHoUseYn = 'Y' THEN N' ' + rat.BuildingHo + N'호' 
                       WHEN rat.BuildingDongUseYn = 'Y' THEN  N' ' + rat.BuildingDong + N'동'
                       WHEN rat.BuildingDongHoUseYn = 'Y' THEN  N' ' + rat.BuildingDong + N'동 ' + rat.BuildingHo + N'호' ELSE '' END )
                ) AS FullAddress
         , rat.UseYn
      FROM RegistrationAlarmTarget AS rat WITH(NOLOCK)
문자열을 + 붙이던 중 특정 조건일 경우에 ELSE 를 생략하면 NULL 이 반환된다. 비교조건이 CASE WHEN 을 거쳐서 다른 비교 조건이 있을때 ELSE 가 없으면 결과 리턴인 안되는 거 같음. ELSE '' END 구문 추가시 모든 결과 정상 리턴됨.