2014-04-21 4 views
1

나는 다음과 유사한 테라 데이타 데이터 세트가 : '!'좋아하는 것/좋아하는 것? ... regexp?

Customer_ID | Targeting_Region 

    12  | targ=EU, targ=!Eu.Fr 

    34  | targ=Asia 

    56  | targ=!EU 

을 '같지 않음'을 나타냅니다. 예를 들어 행 # 1의 고객은 EU를 타겟팅하고 프랑스는 제외하려고합니다.

'긍정적 인'타겟팅이있는 행을 ('1'로) 플래그하는 필드를 만들고 싶습니다. '긍정적 인'타겟팅이란 특정 지역이 명시 적으로 포함 된 행을 말합니다 (행 1의 프랑스 제외와 같이 지역이 제외 된 지역을 '제외'타겟팅이라고합니다). 예를 들어 행 # 1에는 양수 및 음수 타겟팅이 포함되어 있고 행 # 2에는 양수 타겟팅 만 포함되어 있고 행 # 3에는 제외 타겟팅 만 포함되어 있습니다.

내가 만나는 문제는 간단한 사례 진술이 작동하지 않는다는 것입니다 (가능한 한 알 수 있습니다). 나는 아래 2 문을 시도 :

(case when targeting_region like '%targ=%'; then 1 else 0 end) as target_flag 

(case when ((targeting_region like '%targ=%';) and (targeting_region not like '%targ=!%';)) then 1 else 0 end) as target_flag 

는 모두 'TARG ='와 'TARG = 1을 반환하기 때문에 1 문은 위의 작동하지 않습니다!

위의 두 번째 문은 긍정적 인 타겟팅 만있는 행에 대해 1을 반환하기 때문에 작동하지 않습니다. 따라서 행 1 (위)은 0을 반환합니다 (1을 반환하려고합니다).

'targ ='다음에 오는 값은 숫자가 될 수 있습니다. 예 : 'targ = 12345'

달성 방법에 대한 아이디어가 있으십니까? 나는 teradata가 regexp라는 것을 가지고 있다고 들었다. 그러나 꽤 많은 검색 후에 좋은 설명을 찾을 수 없었다.

감사합니다.

답변

0

당신이 찾고있는 것이 정확하지 않을 수도 있지만, 포지티브 타겟과 마이너스 타겟이없는 경우에만 1을 원할 경우, 마이너스 타겟이 존재하면 0으로 만들고, 그렇지 않으면 1로 설정하십시오. 예를 들어

,이 작품 같은

case when targeting_region like '%targ=!%' then 0 
when targeting_region like '%targ=%' then 1 
else null -- Optional if you want to handle when no targeting regions exist 
end as target_flag 
+0

문제 : 당신의 릴리스의 정규 표현식 기능을 포함하지 않는

CASE WHEN REGEXP_INSTR(Targeting_Region,'targ=[^!]') = 0 THEN 0 ELSE 1 END 

경우 OREPLACE가있을 수 있습니다 나는 특정 행에 긍정적이고 부정적인 목표가 둘 다 있다고 생각하고 있습니다. 예 : 원래 게시물의 행 # 1을 참조하십시오. 이 코드와 같은 행은 코드와 함께 0을 반환하지만 1을 반환해야합니다. 응답 해 주셔서 감사합니다! – rahimftd

0

겠습니까 뭔가?

; I는 http://www.info.teradata.com/HTMLPubs/DB_TTU_14_00/index.html#page/SQL_Reference/B035_1145_111A/Regular_Expr_Functions.085.03.html#ww14955402

있어에 REGEXP_INSTR()의 구문 및 예 발견

(케이스 REGEXP_INSTR (targeting_region 'TARG = AZ, AZ]) = 0 다른 한 다음 0) 이 사이트에는 정보가 너무 적었습니다. 작동 시키려면 바이올린을 사용해야합니다. 예를 들어

... "... TARG = ..."에서

등호, 그리고 어쩌면 왼쪽과 오른쪽 브래킷,해야 할 수도 있습니다 아마도 백 슬래시로 이스케이프합니다. 또한 위의 경우 일치하는 항목이 없으면 함수는 NULL 대신 0을 반환한다고 가정합니다. "= 0"에서 "IS NULL"로 변경해야 할 수도 있습니다. 또한 처음 두 개 이후의 매개 변수는 선택적이라고 가정합니다. 이를 지정해야 할 수도 있습니다 (예 : "1,1, i"). 또한 더 나은 문서를 찾을 수있는 경우 [A-Z, a-z]에 대한 바로 가기를 사용하여 표현식을 약간 단순화 할 수 있습니다.

설명 : 두 번째 매개 변수는 첫 번째 매개 변수에서 찾을 "패턴"을 지정합니다. 1."targ ="는 정확히 그 문자를 찾습니다. 2. "[A-Z, a-z]"는 알파벳 문자를 찾습니다. 만약 "!" 일치하지 않으면 나머지 문자열이 검색됩니다. 3. REGEXP_SUBSTR()은 문자열에서 패턴을 찾은 문자 위치를 반환합니다. 그건 네가 단지 그것이 발견되었거나 그렇지 않다는 것을 알고 싶어하기 때문에 과잉이다. 그러나 나는 더 간단한 기능을 찾을 수 없기 때문에 잘 작동한다.

0

내가 올바르게 이해했다면 추가 제외 지역에 관계없이 포함 된 타겟이 있다면?

은 'TARG ='이외의 문자를 다음 검색 '!':

CASE WHEN POSITION('targ=' IN OREPLACE (Targeting_Region, 'targ=!', '')) > 0 THEN 1 ELSE 0 END