복붙노트

[SQL] 데이터베이스 필드에서 특수 문자를 제거

SQL

데이터베이스 필드에서 특수 문자를 제거

나는 수천 기록이있는 데이터베이스를 가지고 있고, 나는 그것이 특정 문자 (영숫자, 공백, 작은 따옴표)가 포함되어 있는지 확인 필드 중 하나를 제거해야합니다. 나는 전체 데이터베이스에서 해당 필드에서 (예 등 슬래시, 등) 다른 문자를 제거하려면 어떻게 SQL을 사용할 수 있습니까?

해결법

  1. ==============================

    1.

    update mytable
    set FieldName = REPLACE(FieldName,'/','')
    

    즉 시작하기에 좋은 장소입니다.

  2. ==============================

    2.바꾸기 () 함수는 첫 번째 선택이 될 것입니다. 그러나, 특수 문자는 가끔 콘솔에서 쓸 까다로울 수있다. 그들을 위해 당신은 CHAR () 함수로 교체 결합 할 수 있습니다.

    바꾸기 () 함수는 첫 번째 선택이 될 것입니다. 그러나, 특수 문자는 가끔 콘솔에서 쓸 까다로울 수있다. 그들을 위해 당신은 CHAR () 함수로 교체 결합 할 수 있습니다.

    예를 들면 € 제거

    Update products set description = replace(description, char(128), '');
    

    당신은 여기에 모든 ASCII 값을 찾을 수 있습니다

    이상적으로는 모든 특수 문자를 찾기 위해 정규식을 할 수 있지만, 분명히 그것은 MySQL과 수 없습니다.

    그건 그렇고, 당신은 당신이 좋아하는 스크립트 언어를 통해 실행해야 할 것입니다.

  3. ==============================

    3.나는 이것에 대한 간단한 함수를 만들었습니다

    나는 이것에 대한 간단한 함수를 만들었습니다

    DROP FUNCTION IF EXISTS `regex_replace`$$
    
    CREATE FUNCTION `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000)) RETURNS VARCHAR(1000) CHARSET utf8mb4
        DETERMINISTIC
    BEGIN    
        DECLARE temp VARCHAR(1000); 
        DECLARE ch VARCHAR(1); 
        DECLARE i INT;
        SET i = 1;
        SET temp = '';
        IF original REGEXP pattern THEN 
            loop_label: LOOP 
                IF i>CHAR_LENGTH(original) THEN
                    LEAVE loop_label;  
                END IF;
    
                SET ch = SUBSTRING(original,i,1);
    
                IF NOT ch REGEXP pattern THEN
                    SET temp = CONCAT(temp,ch);
                ELSE
                    SET temp = CONCAT(temp,replacement);
                END IF;
    
                SET i=i+1;
            END LOOP;
        ELSE
            SET temp = original;
        END IF;
    
        RETURN temp;
    END
    

    사용 예 :

    SELECT <field-name> AS NormalText, regex_replace('[^A-Za-z0-9 ]', '', <field-name>)AS RegexText FROM 
    <table-name>
    
  4. ==============================

    4.이것은 또한 유용 할 수 있습니다.

    이것은 또한 유용 할 수 있습니다.

    먼저 및 / 또는 테이블의 데이터베이스 문자 집합을 알아야합니다. 예를 들어, 우리가 당신을 UTF-8 환경을 가정하자 당신은 다음 빙이나 야후를 통해 인터넷을 검색하거나에 대한 구글 필드에서 원 등록 기호 동그라미 저작권 기호 및 등록 상표의 상징처럼 / 제거 기호를 제거하려면 UTF-8 환경 시스템에서 이러한 기호의 16 진수 코드 값 :

    Symbol                       Utf-8 Hex
    =======                      =========
    circled copyright              C2A9
    circled registered             C2AE
    Trademark (i.e., TM)           E284A2
    

    그런 다음이 같은 가능성이 가장 높은 모양은 대체 기능과 함께 육각 / unhex 기능을 사용하여, 테이블 t1에서 필드 F1에 대한 선택 SQL을 것 닦고 :

    고르다 cleanf1 AS 캐스트 (unhex (헥스 (F1 (교체 (교체 (교환) CHAR AS 'C2A9' ''), "C2AE '' '),"E284A2' ''))) T1 FROM ;

    위가되도록 원래의 필드에게 준거주의 / 말끔히 F1, 테이블 T1이고 출력 헤더 cleanf1이다. / O를 그것 승, 내가 시험되는 MySQL은 5.5.8가 덩어리를 반환, 때문에 "문자로"캐스팅이 필요하다. 도움이 되었기를 바랍니다

  5. ==============================

    5.Vinnies 답변에 정성 들여 ... 당신은 마지막 두 문장에서 탈출 다음 (메모를 사용할 수 있습니다 ...

    Vinnies 답변에 정성 들여 ... 당신은 마지막 두 문장에서 탈출 다음 (메모를 사용할 수 있습니다 ...

    update table set column = REPLACE(column,"`","");
    update table set column = REPLACE(column,"~","");
    update table set column = REPLACE(column,"!","");
    update table set column = REPLACE(column,"@","");
    update table set column = REPLACE(column,"#","");
    update table set column = REPLACE(column,"$","");
    update table set column = REPLACE(column,"%","");
    update table set column = REPLACE(column,"^","");
    update table set column = REPLACE(column,"&","");
    update table set column = REPLACE(column,"*","");
    update table set column = REPLACE(column,"(","");
    update table set column = REPLACE(column,")","");
    update table set column = REPLACE(column,"-","");
    update table set column = REPLACE(column,"_","");
    update table set column = REPLACE(column,"=","");
    update table set column = REPLACE(column,"+","");
    update table set column = REPLACE(column,"{","");
    update table set column = REPLACE(column,"}","");
    update table set column = REPLACE(column,"[","");
    update table set column = REPLACE(column,"]","");
    update table set column = REPLACE(column,"|","");
    update table set column = REPLACE(column,";","");
    update table set column = REPLACE(column,":","");
    update table set column = REPLACE(column,"'","");
    update table set column = REPLACE(column,"<","");
    update table set column = REPLACE(column,",","");
    update table set column = REPLACE(column,">","");
    update table set column = REPLACE(column,".","");
    update table set column = REPLACE(column,"/","");
    update table set column = REPLACE(column,"?","");
    update table set column = REPLACE(column,"\\","");
    update table set column = REPLACE(column,"\"","");
    
  6. ==============================

    6.이 유용 할 수 있습니다.

    이 유용 할 수 있습니다.

    이 솔루션은 절차 또는 함수 또는 대체 내 교체의 긴 사용을 만드는 작업이 포함되지 않습니다. 대신 우리는 알 수없는 ASCII 코드 \ x20- \ x7E (16 진수 표현) 내에서 특수 문자 거짓말을 포함 않습니다 모든 ASCII 문자. 출처 위키 백과에서 ASCII, 아래의 백과 사전은 그 간격에서 모든 문자입니다.

    Hex: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E
    Glyph:  space ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ↑ ← @ a b c d e f g h i j k l m n o p q r s t u v w x y z { ACK } ESC
    

    그래서 간단한 정규 표현식으로 일을 할 것입니다 대체

    SELECT REGEXP_REPLACE(columnName, '[^\\x20-\\x7E]', '') from tableName;
    

    PHP 사용자 정의 쿼리 문자열

    $query = "select REGEXP_REPLACE(columnName, '(.*)[(].*[)](.*)', CONCAT('\\\\1', '\\\\2')) `Alias` FROM table_Name";
    

    위의 문장은 괄호뿐만 아니라 괄호 사이에있는 콘텐츠를 대체합니다. 예를 들면 칼럼은 '직원 Oreintation (CMST TOT)을'들어 있으면 문 위의 브래킷과의 상수, 즉 '직원 Oreintation'를 제거한다.

    PS : 당신이 저장 프로 시저 또는 PHP (사용자 지정 쿼리 문자열을 만드는)을 통해 문을 준비 사용하는 DML (선택, 업데이트, ...) 작업을 수행하는 경우; 다음 슬래시를 이스케이프 기억 즉,

    SET @sql = CONCAT("SELECT REGEXP_REPLACE(columnName, '[^\\\\x20-\\\\x7E]', '') from tableName");
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    위의 SQL 문은 모든 특수 문자의 간단한 정규 표현식을 대체 (실제로 제거합니다)을 수행; 즉 SQL에서 정규식 패턴은 아무것도로 대체 될 수있는 모든 특수 문자의 언급이다.

    패턴의 설명

    문자 그룹은 대괄호로 시작됩니다. 첫 번째 문자는 탈자 수단; 모든 문자의 부정 (사각형 괄호로 즉) 그룹에 언급. 이것은 단순히 선택 칭찬 그룹의 모든 문자 (선택 이외의 문자)을 의미한다.

    바로 위의 문장의 뜻을 요약합니다

    변경되지 않은 : 모든 숫자, 문장 부호 문자, 산술 연산자.

    모든 유니 코드 (라틴 알파벳 이외의) 문자 또는 특수 문자를 제거합니다.

  7. ==============================

    7.MySQL 서버에 컴파일 할 필요가 있지만, 그러한 당신의 작업에 도움이 될 것입니다 preg_replace이다 같은 고급 정규 표현식 시설이 LIB_MYSQLUDF_PREG에서보세요.

    MySQL 서버에 컴파일 할 필요가 있지만, 그러한 당신의 작업에 도움이 될 것입니다 preg_replace이다 같은 고급 정규 표현식 시설이 LIB_MYSQLUDF_PREG에서보세요.

  8. ==============================

    8.어떤 정규 표현식 교체는 없다. 모든 특수 문자를 교체하려면 다음 코드를 사용하여 '-'.

    어떤 정규 표현식 교체는 없다. 모든 특수 문자를 교체하려면 다음 코드를 사용하여 '-'.

    UPDATE <table> SET <column> = REPLACE ( REPLACE ( REPLACE ( REPLACE ( REPLACE ( REPLACE ( REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (<column>, '/', '-'), ',', '-'), '.', '-'), '<', '-'), '>', '-'), '?', '-'), ';', '-'), ':', '-'), '"', '-'), "'", '-'), '|', '-'), '\\', '-'), '=', '-'), '+', '-'), '*', '-'), '&', '-'), '^', '-'), '%', '-'), '$', '-'), '#', '-'), '@', '-'), '!', '-'), '~', '-'), '`', '-'), '', '-'), '{', '-' ), '}', '-' ), '[', '-' ), ']', '-' ), '(', '-' ), ')', '-' )
    

    코드 포맷

    UPDATE
        <table>
    SET
        <column> =
    REPLACE
        (
        REPLACE
            (
            REPLACE
                (
                REPLACE
                    (
                    REPLACE
                        (
                        REPLACE
                            (
                            REPLACE
                                (
                                REPLACE
                                    (
                                    REPLACE
                                        (
                                        REPLACE
                                            (
                                            REPLACE
                                                (
                                                REPLACE
                                                    (
                                                    REPLACE
                                                        (
                                                        REPLACE
                                                            (
                                                            REPLACE
                                                                (
                                                                REPLACE
                                                                    (
                                                                    REPLACE
                                                                        (
                                                                        REPLACE
                                                                            (
                                                                            REPLACE
                                                                                (
                                                                                REPLACE
                                                                                    (
                                                                                    REPLACE
                                                                                        (
                                                                                        REPLACE
                                                                                            (
                                                                                            REPLACE
                                                                                                (
                                                                                                REPLACE
                                                                                                    (
                                                                                                    REPLACE
                                                                                                        (
                                                                                                        REPLACE
                                                                                                            (
                                                                                                            REPLACE
                                                                                                                (
                                                                                                                REPLACE
                                                                                                                    (
                                                                                                                    REPLACE
                                                                                                                        (
                                                                                                                        REPLACE
                                                                                                                            (
                                                                                                                        REPLACE
                                                                                                                            (<column>, '/', '-'),
                                                                                                                            ',',
                                                                                                                            '-'
                                                                                                                        ),
                                                                                                                        '.',
                                                                                                                        '-'
                                                                                                                    ),
                                                                                                                    '<',
                                                                                                                    '-'
                                                                                                                ),
                                                                                                                '>',
                                                                                                                '-'
                                                                                                            ),
                                                                                                            '?',
                                                                                                            '-'
                                                                                                        ),
                                                                                                        ';',
                                                                                                        '-'
                                                                                                    ),
                                                                                                    ':',
                                                                                                    '-'
                                                                                                ),
                                                                                                '"',
                                                                                                '-'
                                                                                            ),
                                                                                            "'",
                                                                                            '-'
                                                                                        ),
                                                                                        '|',
                                                                                        '-'
                                                                                    ),
                                                                                    '\\',
                                                                                    '-'
                                                                                ),
                                                                                '=',
                                                                                '-'
                                                                            ),
                                                                            '+',
                                                                            '-'
                                                                        ),
                                                                        '*',
                                                                        '-'
                                                                    ),
                                                                    '&',
                                                                    '-'
                                                                ),
                                                                '^',
                                                                '-'
                                                            ),
                                                            '%',
                                                            '-'
                                                        ),
                                                        '$',
                                                        '-'
                                                    ),
                                                    '#',
                                                    '-'
                                                ),
                                                '@',
                                                '-'
                                            ),
                                            '!',
                                            '-'
                                        ),
                                        '~',
                                        '-'
                                    ),
                                    '`',
                                    '-'
                                ),
                                '',
                                '-'
                            ),
                            '{',
                            '-'
                        ),
                        '}',
                        '-'
                    ),
                    '[',
                    '-'
                ),
                ']',
                '-'
            ),
            '(',
            '-'
        ),
        ')',
        '-'
    )
    
  9. ==============================

    9.MySQL의 내 버전 REGEXP_REPLACE이없는 (). 나는 다음과 같은 두 가지 해결 방법을 사용 : 1. 제거 지정된 문자 (당신이 제거하고 싶은 문자를 알고있는 경우)

    MySQL의 내 버전 REGEXP_REPLACE이없는 (). 나는 다음과 같은 두 가지 해결 방법을 사용 : 1. 제거 지정된 문자 (당신이 제거하고 싶은 문자를 알고있는 경우)

        create function fn_remove_selected_characters
            (v_input_string varchar(255),
             v_unacceptable_characters varchar(255))
        RETURNS varchar(255)
        BEGIN
    
        -- declare variables
        declare i int;
        declare unacceptable_values varchar(255);
        declare this_character char(1);
        declare output_string varchar(255);
        declare input_length int;
        declare boolean_value int;
        declare space varchar(3);
    
        -- Set variable values
        set input_length = char_length(v_input_string);
        set i = 0;
        set unacceptable_values = v_unacceptable_characters;
        set output_string = '';
        set boolean_value = 0;
        set space = 'no';
    
        begin
        -- Leave spaces if they aren't in the exclude list
        if instr( unacceptable_values, ' ') = 0 then
            begin
            while i < input_length do
                SET this_character = SUBSTRING( v_input_string, i, 1 );
                    -- If the current character is a space, 
                    -- then concatenate a space to the output
                    -- Although it seems redundant to explicitly add a space,
                    -- SUBSTRING() equates a space to the empty string
                    if this_character = ' ' then
                        set output_string = concat(output_string, ' ');
                    -- if the current character is not a space, remove it if it's unwanted
                    elseif instr(unacceptable_values, this_character) then
                        set output_string = concat(output_string, '');
                    -- otherwise include the character
                    else set output_string = concat(output_string, this_character);
                    end if;
                set i = i + 1;
            end while;
            end;
        else
            begin
            while i < input_length do
                begin
                SET this_character = SUBSTRING( v_input_string, i, 1 );
                if instr(unacceptable_values, this_character) > 0 then
                    set output_string = concat(output_string, '');
                else set output_string = concat(output_string, this_character);
                end if;
                end;
                set i = i + 1;
            end while;
            end;
        end if;
        end;
            RETURN output_string;
    
        create function fn_preserve_selected_characters
            (v_input_string varchar(255),
             v_acceptable_characters varchar(255))
        returns varchar(255)
    
        begin
        declare i int;
        declare acceptable_values varchar(255);
        declare this_character char(1);
        declare output_string varchar(255);
        declare input_length int;
        declare boolean_value int;
        declare space varchar(3);
    
        set input_length = char_length(v_input_string);
        set i = 0;
        set acceptable_values = v_acceptable_characters;
        set output_string = '';
        set boolean_value = 0;
        set space = 'no';
    
        begin
    
        -- check for existence of spaces
        if instr( acceptable_values, ' ') then
            begin
            while i < input_length do
                -- SUBSTRING() treats spaces as empty strings
                -- so handle them specially
                SET this_character = SUBSTRING( v_input_string, i, 1 );
                    if this_character = ' ' then
                        set output_string = concat(output_string, ' ');
                    elseif instr(acceptable_values, this_character) then
                        set output_string = concat(output_string, this_character);
                    else set output_string = concat(output_string, '');
                    end if;
                set i = i + 1;
            end while;
            end;
        -- if there are no spaces in input string
        -- then this section is complete
        else 
            begin
            while i <= input_length do
                SET this_character = SUBSTRING( v_input_string, i, 1 );
                -- if the current character exists in the punctuation string
                if LOCATE( this_character, acceptable_values ) > 0 THEN
                    set output_string = concat(output_string, this_character);
                end if;
                set i = i+1;
            end while;
            end;
        end if;
        end;
            RETURN output_string;
    
  10. ==============================

    10.Adeel의 대답은 지금까지 최고의 간단합니다.

    Adeel의 대답은 지금까지 최고의 간단합니다.

    영업 이익 내가 너무 필요하다 DB를 업데이트 할 필요가 있었다. 그래서 나는 나처럼, 다음 가난한 유일한 여기 그것을 넣어 것,하지 내가 무슨 짓을 다시 실행해야 할 생각.

    더블 체크 첫째을 선택하고 업데이트하기 전에 당신이 올바른 행을 받고있어 할을 검사합니다.

    SELECT REGEXP_REPLACE(columnName, '[^\\x20-\\x7E]', '') from tableName;
    

    안전 점검을 수행하는 카운트 ...

    SELECT count(*) from tableName WHERE columnName REGEXP '[^\\x20-\\x7E]';
    

    어떤 이름의 I는 O가 무덤 또는 회선 또는 움라우트을 가지고 있기 때문에 Ramn에 라몬 같은 그 의미를 상실하지 않도록 다른 매핑을해야했다. 나는 이것이 매핑하는 데 사용 그래서 ... https://theasciicode.com.ar

    그런 다음이 업데이트는 모든 매핑 업데이트 후 캐치입니다 업데이트합니다. 위의 카운트 값으로 제한 번호를 변경 ...

    UPDATE tablename SET columnName = REGEXP_REPLACE(columnName, '[^\\x20-\\x7E]', '') WHERE columnName REGEXP '[^\\x20-\\x7E]' LIMIT 1;
    
  11. from https://stackoverflow.com/questions/6066953/remove-special-characters-from-a-database-field by cc-by-sa and MIT license