2014-04-19 2 views
0

도시 및 방향 필드가있는 행이 많습니다. 그러나 오래된 수입품에서 도시와 방향은 방향성 장에서 혼합됩니다. 같은 뭔가 :regex를 사용하여 postgresql의 텍스트 필드에서 문자열을 추출합니다.

 
dir number, extra data, CITY, AL 111111 
dir number, CITY, AL 111111 
number, dir, number, CITY, dir number, CITY, AL 111111 

중요한 것은 CITY는 우편 번호가 항상 전면 미국라고하고 나는 그것을 추출 정규식을 사용하여 업데이트 SQL로 도시 필드에 저장하고자합니다. 가능한가? 같은

뭔가 :

update TABLE set city = SOME_REGEX_MAGIC_FROM_DIRECTION_FIELD 
where direccion ~ 'REGEX_MAGIC' 

감사합니다!

실무 SQL 문 :

데이터에서
update TABLE 
set city = substring(direction FROM '([^,]+),[^,]+$') 
where direction like '%, __ _____' 
+0

당신이 당신의 샘플 데이터를 준비하시기 바랍니다 수 있습니다 어떤 적절한 방법? 또는 예상되는 출력을 가진 적절한 값을 부여하십시오. –

+0

'AL'이전의 파트 또는 오해의 소지가있는 예제입니까? 그렇다면 –

답변

0

을, 하나의 방법

substring(direction FROM ',([^,]+),[^,]+$') AS city 

: (많은)은 일반 substring() 호출 (정규 표현식 변형) 함께 773,503,210

귀하의 UPDATE 문은 다음과 같습니다

UPDATE tbl 
SET city = substring(direction FROM ',([^,]+),[^,]+$') AS city 
WHERE direccion LIKE '%CITY%'; -- LIKE is faster 
+0

감사! 잘 설명하지 않은 경우 영어로 실례합니다. 정규 표현식이 효과적입니다. 나는 항상 정규식의 부정에 대해 잊어 버리고 많은 문제를 해결했습니다. "도시, XX 99999"와 같은 또 다른 레코드가 있습니다. 정규식에 작은 변화가 있으면 매력처럼 작동합니다. 근로 SQL 문 : 업데이트 표 설정시 = 문자열 (FROM 방향 '([^,] +) [^,] + $') 경우 방향 ', __ _____ %' 102,051 레지스터 등이 변경됨 :) – Indeax

0

난 당신이 뭔가해야한다는 수집하는 것입니다 : 마지막 쉼표 전에 일부를 원하는 경우

SELECT regexp_matches('direction_field', '([^,]+) \d{5}'); 
+0

울프, 감사합니다. 명확히하십시오. 그러나 작동하지 않았습니다. 방향 필드가 더 복잡하고 우편 번호가 반복되어 도시가 아닌 지역 코드를 추출합니다. – Indeax

+0

끝내서 작업하게되어 기쁩니다. – Wolph

-1

가 Redshift에있는 정규식에서 문자열을 가져옵니다 :

SELECT REGEXP_SUBSTR(
    'hello_uuid_092bab12-8d8b-40ad-b8b7-bc9f05e52c9c_something_else', 
    '([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})' 
) 

결과 : 092bab12-8d8b-40ad-b8b7-bc9f05e52c9c

관련 문제