2017-10-20 13 views
0

원하는 결과를 생성하는 올바른 REGEXP 구문은 무엇입니까? 감사!SQL의 REGEXP 함수를 사용하여 대문자와 그 앞에 소문자 사이에 밑줄을 삽입하십시오.

표 1은 다음과 같습니다 : I는 다음과 같이 할 싶습니다

user_id  city_state 
123   MiamiFlorida 
234   PhiladelphiaPennsylvania 
345   ClevelandOhio 

: 수정 됨


user_id  city_state 
123   Miami_Florida 
234   Philadelphia_Pennsylvania 
345   Cleveland_Ohio 

======을 ======

Presto를 통해 @ Gary_W의 논리를 적용한 후 다음 결과가 반환되었습니다.

USER_ID FIXED 
---------- ------------------------------ 
     123 Miam1_2lorida 
     234 Philadelphi1_2ennsylvania 
     345 Clevelan1_2hio 

최종 편지는 어떻게 보관합니까?

+0

문자열에서 임의의 도시 이름을 구문 분석하는 방법은 무엇입니까? –

+0

좋은 지적. 나 한테 다시 말해줘. regexp를 다음과 같이 사용하십시오. 1. 대문자로 된 글자 을 찾으십시오. 대문자로 시작하는 글자가 있는지 확인하십시오. 3. 대문자로 시작하는 글자가 있으면 대문자로 시작하는 글자와 대문자로 시작하는 글자 사이에 밑줄을 삽입하십시오. 앞에옵니다. 대문자로 시작하는 문자가 없으면 아무 것도하지 마십시오. – Levine

+0

@JacobH, 방금 질문을 명확히했습니다. 감사! – Levine

답변

2

당신은 RDBMS를 지정하지 않았지만 오라클에서 나는 이와 같은 것을 할 것입니다. 어쨌든 대문자가 뒤따라 오는 어떤 편지를 찾아 그들 자신의 그룹에 두어 "기억"되도록하십시오. 그런 다음 그 사이의 밑줄로 바꿉니다. 기억 된 각 그룹은 \ 1, \ 2 등으로 순서대로 참조됩니다.

정규식을 자신의 취향에 맞게 조정할 수 있어야합니다.

EDIT - 포스터가 Presto를 사용하고 있으며이 도구는 기억 된 그룹 번호 앞에 백 슬래시 대신 달러 기호를 사용합니다.

SQL> with tbl(user_id,city_state) as (
     select 123, 'MiamiFlorida' from dual union all 
     select 234, 'PhiladelphiaPennsylvania' from dual union all 
     select 345, 'ClevelandOhio' from dual 
    ) 
    select user_id, 
      regexp_replace(city_state, '([a-zA-Z])([A-Z])', '\1_\2') fixed 
    from tbl; 

    USER_ID FIXED 
---------- ------------------------------ 
     123 Miami_Florida 
     234 Philadelphia_Pennsylvania 
     345 Cleveland_Ohio 
+0

고마워, @ Gary_W. 내 결과는 다음과 같습니다 : 'USER_ID FIXED ---------- -------------------------- ---- 123 Miam1_2lorida 234 필라델피아 1_2ennsylvania 345 Clevelan1_2hio' 최종 편지는 어떻게 보관합니까? – Levine

+0

기억 된 그룹을 식별하기위한 문자가 달라야합니다. 편집 버튼을 사용하여 원래 게시물을 업데이트하고 주석이 서식을 허용하지 않으므로 코드를 표시하십시오. 어떤 도구 나 데이터베이스를 사용하고 있는지 표시하십시오. –