2012-05-08 3 views
0

데이터베이스를 청소하려고합니다. 그들에는 우편 번호 란에있는 몇몇 나쁜 가치를 가진 70k 입장이있다. 유효한 5 또는 9 자리 우편 번호가없는 행을 삭제하고 삭제하고 싶습니다. 이것은 내가 가지고있는 현재의 진술입니다 :우편 번호 용 MySQL REGEX WHERE 절

SELECT * FROM `sample_requests` WHERE `request_zip` RegExp '^\d{5}$)|(^\d{5}-\d{4}$)' 

저는 정규 표현식에 익숙하지 않지만 충분히 알고 있습니다. 또한이 특정 정규식은 양식에 사용되므로 올바른 우편 번호없이 제출하지 않고 작동한다는 것을 알게됩니다. MySQL 부분을 사용할 수 없습니다.

+1

당신은 여는 괄호를 놓치고 : 여기

당신이 (당신이 그것을 작동 알 수 있도록 먼저 중복 된 테이블 행을 h)에 관심있는 명령입니다'(^ \ D {5} $) | (^ \ d {5} - \ d {4} $) '' – eggyal

답변

1

SELECT 대신 DELETE을 사용해야합니다. 이 작업을 수행하기 전에 실수로 실수로 대비하여 'sample_requests'테이블을 만들 수 있습니다.

DELETE FROM sample_requests_duplicate 
WHERE request_zip NOT RegExp '(^\d{5}$)|(^\d{5}-\d{4}$)' 
+0

맞습니다. 나는 방금 RegExp 부분을 작동시키고 SELECT가 DELETE보다 약간 안전하다고 생각했다. :) 당신이 저에게 준 코드는 좋은 것들을 삭제합니까? How do you say "WHERE! ="정규 표현식을 사용합니까? –

+0

새로운 답변을 확인하십시오.'NOT' 문법 ('='또는'! ='는 작동하지 않습니다)이 작동하지 않으면 Regex에'!'가 없습니까? 나는 잘 모르겠다. 그래서 잘 모르겠다. –

+0

고마워. 너는 내 질문에 대답했다. NOT은 작동하지 않는 것처럼 보이므로 정규식이 어떻게되는지 알아 내려고 노력해야 할 것입니다! 연산자가 작동합니다. –