2010-03-24 3 views
1

연락처 및 우편 번호 데이터 테이블이 있습니다.UPDATE REGEX MYSQL

나는 ... 업데이트를 수행 내가 이런 일을하고 싶지

을 ... 우편 번호의 첫 번째 부분과 일치하고, 다음 ... 우편 번호 테이블과 그에 가입 할 필요가

UPDATE `contacts` LEFT JOIN `postcodes` ON PREG_GREP("/^[A-Z]{1,2}[0-9][0-9A-Z]{0,1}/", `contacts`.`postcode`) = `postcodes`.`postcode` SET `contacts`.`lat` = `postcode`.`lat`, `contacts`.`lng` = `postcode`.`lng` 

가능합니까 ?? 아니면 외부 스크립트를 사용해야합니까?

감사합니다.

update c 
set c.lat = p.lat, c.lng = p.lng 
from contacts c 
inner join postcodes p 
    on substring(c.postcode, 0, [LENGTH]) = substring(p.postcode, 0, [LENGTH] 

답변

0

나는 다른 각도에서 접근하기로 결정 : 당신이 정규식을 사용하고 있지만, 당신은 단지 첫번째 [길이]를 필요로하는 경우 문자가이 작동 동일 무엇

+0

LEFT OUTER JOIN을 INNER JOIN으로 변경하거나 WHERE 절을 추가하지 않는 한 방금 업데이트했습니다 동료 테이블에있는 모든 레코드, 일부는 null 값일 수 있습니다. 그것이 당신의 의도입니까? –

+0

좋은 지적. 방금 편집 ... – Simon

0

임 확실하지. .. 약간의 충돌이 있을지도 모르지만 나는 그것으로 살 수있다.

UPDATE fellow f INNER JOIN postcode p ON f.postcode LIKE CONCAT(p.postcode, "%") SET f.lat = p.lat, f.lng = p.lng 
+0

연락처 표는 전체 우편 번호의 예 : "W1A의 1AA"및 우편 번호 테이블은 "W1A"가있다 ... 말썽 데이터가 너무 "W1A1AA"또는 "w1A1aA"로 기록 될 수 있습니다 일관성이있다. – Simon

+0

mysql은 그런 캡처를 지원하지 않는 것처럼 보이므로 완벽한 스크립트를 작성해야합니다./ – Fabian