2012-09-05 2 views
4

작은 질문이 하나 있는데, 새 것이므로 좀 도와주세요. 내 프로젝트에서SSIS - 파생 열

나는 zip4zip5, 나는 우편 번호 둘을 연결하려는이 하나 개의 텍스트 파일을 가지고 있지만, 일부 장소 zip4가 (null이 아닌) 비어에서 그것은 하나의 문제가있다 그래서 나는 함께 파생 된 열을 사용하는 경우 ISNULL(ZIP_4) ? ZIP_5 : (ZIP_5 + "-" + ZIP_4) 식 을 반환합니다. 여기에서 zip4은 비어 있고 zip5은 없이 만 입력하면됩니다.

제발 도와주세요.

+0

SQL Server 또는 SSIS 패키지로 연결하려고합니까? – Praveen

답변

4

ISNULL([ZIP_4]) || LEN(RTRIM(LTRIM([ZIP_4]))) == 0 ? [ZIP_5] : ([ZIP_5] + "-" + [ZIP_4]) 

두 번째는 길이를 확인하기 전에 zip_4 양쪽을 트리밍합니다

ISNULL([ZIP_4]) || LEN([ZIP_4]) == 0 ? [ZIP_5] : ([ZIP_5] + "-" + [ZIP_4]) 

또는

를 사용해보십시오.

0

ANSI 정의 동작은 null과 관련된 모든 작업에서 nullity (is [not] null)의 명시적인 테스트를 수행하면 null이 반환된다는 것입니다. 불행히도 SQL Server의 기본 동작은 비표준입니다.

  • set ansi_nulls on
  • set concat_nulls on
  • : 그래서 ...

    당신은 당신이 독립 쿼리를 실행하기 전에 저장 프로 시저에 대해 다음 두 가지 설정에 을 수 있는지 확인하거나 관련 켜져 필요

저장 프로 시저의 본문에서이 항목을 설정하면 해당 저장 프로 시저에만 설정이 적용됩니다. 연결을 위해 (set 문을 실행하여) 연결을 설정하면 해당 연결에서 실행되는 모든 쿼리에 해당됩니다 (저장 프로 시저에 자체 실행 컨텍스트가있는 경우 제외).

누락 된 데이터가 항상 —이 아닌 로직을 단순하게 만드는 대신 항상 null임을 보장 할 수는 없습니다. 당신은 일단

어쨌든, 적절한`null의 행동은 트릭을 할해야

-- if missing data is always NULL, do this 
select zip9 = t1.zip5 + coalesce('-'+t1.zip4 , '') 
from someTable t1 

또는

-- if missing data might be nil ('') or NULL, do this 
select zip9 = t1.zip5 
      + coalesce(
       '-' 
       + case coalesce(t1.zip4,'') when '' then null else t1.zip4 end , 
       '' 
       ) 
from someTable t1 

처럼 뭔가 할 수 있었다.

그렇지 않으면 올바른 동작을 사용하지 않으려는 경우 이와 같은 작업을 수행 할 수 있습니다. 이것은 표준 NULL 동작에서도 작동합니다. 여러 테스트가 포함되어 있기 때문에 나는 그것을 좋아하지 않습니다. 그러나 그들이 말한대로 TMTOWTDI.

select zip9 = t1.zip5 
      + case 
       when t1.zip4 = '' then '' 
       when t1.zip4 is null then '' 
       else '-' + t1.zip4 
       end 
from someTable t1 
+0

항상 "NULLIF"(http://msdn.microsoft.com/ko-kr/library/ms177562)를 사용할 수 있습니다 "누락 된 데이터가 항상 null 문자열이 아닌 null이라는 것을 보장 할 수 없다는 유감"을 해결하기 위해. aspx) 빈 문자열을 null 값으로 강제 변환합니다. – billinkc

+0

@billinkc : 표준 함수'coalesce()는 어떻게 생각합니까? –

+0

내 사과, 두뇌는 내가 논평하는 것처럼 남쪽으로 갔다. NULLIF는 값이 일치하면 무언가를 NULL로 변환하므로 NULLIF (t1.zip4, '')는 NULL 값뿐만 아니라 NULL 문자열도 NULL을 반환합니다. 이렇게하면 좀 더 자세한 case 문 대신 첫 번째 코드 조각't1.zip5 + coalesce ('-'+ NULLIF (t1.zip4, ''), '')'를 사용할 수 있습니다. – billinkc