2017-01-18 7 views
1

I이 속성 co 다음과 같은 table1 : 인용 부호가있는 경우임 팔 라 regex_extract 방법에 정규식 OR 연산을 사용하여 얻는 방법 다른 캡처 그룹

|----------------------------------------- 
| co 
|----------------------------------------- 
| fsdsdf "This one" fdsfsd ghjhgj "sfdsf" 
| Just This 
|----------------------------------------- 

- 내가 처음 발생 내용을 좀하고 싶습니다 . 따옴표가 없으면 내용을 그대로 반환하고 싶습니다. 위의 예를 들어 : 탐지하고를 반환하는

select regexp_extract (co, '"([^"]*")',1) from table1 

어떻게 그것을 일반화 할 수 있습니다 첫 번째 줄에 들어 - - 두 번째 라인에 대한 This one Just This 나는 첫 번째 경우를 해결 임팔라에서 SQL 코드가 다음 사건에 대한 결과가 필요합니까?

+0

SQL에서 'COALESCE'또는 'IF()'를 사용하여 일치하지 않으면 구멍 문자열을 반환 할 수 있습니다. –

+0

SQL은이 작업을 수행하는 가장 좋은 도구는 아닙니다. 임팔라에서 어떻게이 데이터를 문질러 닦아야 했습니까? –

+0

데이터가 이미 임팔라에 있습니다. 더 효율적인 이후 위의 SQL 기능을 REGEX 기능을 사용하고 싶습니다. 나는 해결책이 REGEX에서 OR 식을 사용할 수 있다고 생각한다 : http://stackoverflow.com/questions/8020848/and-or-operator-in-regular-expression – Avi

답변

1

임팔라에서는 일반화 할 수 없습니다. 당신이 가지고있는 문제에 관해서는 OR | 귀하의 정규식에서 구현. regex_extract를 사용하면 캡처 그룹 번호를 입력해야합니다. 결국. 예 : 1) from table1

그러나와

select regexp_extract (co, '"([^"]*")', | 피연산자가 정규식에 있으면 캡처 그룹이 두 경우 모두 달라야합니다. regex_extract 메소드에서는 정의 할 수 없습니다.

경우 (A) | (B) 당신의 첫 번째 경우에 대한 캡처 후 그룹은 이고 두 번째 경우 캡처 그룹은 이 될 것입니다. 하지만 regex_extract 구문에 1과 2를 모두 넣을 수는 없습니다.

일반 정규식 구문 (내가 임 팔 라 그룹에서 작동하지 않습니다 생각하는) 것 : 링크에서

^(?!.*")(.*)$|^[^"]*"(.*?)".*$ 

Watch out the capture groupings

, 당신은 을 볼 "이 하나가"이 촬영됩니다 그룹 2로 다음과 같이 그냥이은 그룹 1로 캡처됩니다.

0

확인 조합을 사용합니다.

select regexp_extract (co, '"([^"]*")',1) from table1 
union 
select co from table1 where co like '"%"' 
+0

그것은 정규 표현식이 아닌가? –