2009-08-21 2 views
0

MySQL 쿼리에서 좀 더 많은 '고급'문자열을 대체 할 수 있습니까? 내가 REPLACE() 방법에 대해 읽었지만, 내가 아는 한, 그것은 멋진 것들에 사용될 수 없다.MySQL 패턴 바꾸기

기본적으로 큰 데이터 세트의 특정 열에서 모든 HTML 태그를 제거하려고합니다. 단일 쿼리에서이를 수행 할 수 있다는 것은 PHP를 사용하여 처리하는 것보다 훨씬 시원할 것입니다. < >에 캡슐화 된 모든 것을 제거하기 위해 무엇인가 우아한 것을 할 수 있습니까? 태그 중 일부는 지금 <를 포함하기 전에 일부 부적절한 데이터 변환에 의한

난 그냥 또 다른 작은 캐치 거기 실현 ..., 및>자신은 ... 최악의 경우는 <(><<)>b>처럼 보인다. 어떻게 물어 보지 마라. 그러나 무언가 잘못되어 간 것 같다. 어쨌든, 이것에 대한 훌륭한 아이디어를 가진 위대한 마음?

+0

http://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in-mysql || http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags?lq=1 –

답변

2

짧은 대답 : 아니오, 이것은 SQL로 수행 할 수 없습니다. 이것은 프로그래밍 언어에서해야하는 일종의 작업입니다. 실제로 프로그래밍 언어를 사용하면 편리합니다.

적절한 HTML이 아니므로 기존 방법으로 구문 분석하는 것이 문제가되지 않을 수 있습니다. 끔찍한 hackish 정규식이 도움이 될 수도 있습니다. 또는 특정이 일반적으로 나타나는 경우와 같이 특정 "버그가 많은"문자열을 찾아 내고 기존 REPLACE()으로 삭제할 수 있습니다.

물론 세부 정보는 사용하는 데이터와 사용할 수있는 도구에 따라 다르지만 MySQL은 대부분의 작업을 수행 할 수 없습니다.

0

죄송합니다. 운이 없네요. MySQL에는 정규 표현식이나 비슷한 대체 교수가 없습니다.

1

기능을 해킹 할 수는 있지만 그 방법이라고 생각하지 않습니다.

CREATE FUNCTION strip_tags(String VARCHAR(9999)) 
RETURNS VARCHAR(9999) 
DETERMINISTIC 
BEGIN 
    DECLARE start, end, len INT; 
    SET start = LOCATE('<', String); 
    SET end = LOCATE('>', String, start); 
    WHILE start> 0 AND end > 0 DO 
     BEGIN 
     SET String = INSERT(String, start, end, ''); 
     SET start = LOCATE('<', String); 
     SET end = LOCATE('>', String, start); 
     END; 
    END WHILE; 
    RETURN String; 
END; 

면책 조항 : 코드가 테스트되지 않았습니다.

+0

흥미 롭습니다 ...하지만 나는 그것이 엉망으로 도와주지 않을 것이라고 생각합니다. - 업 태그. _will_ 함수를 만드는 것은 아마도 상당한 옵션이 아닙니다. 어쨌든 고마워! – JorenB

+0

원하는대로 구현할 수 있습니다. 그것은 단지 맛의 문제 일뿐입니다. 이러한 복잡한 논리 SQL 들어 내 선택 :) – Zed