복붙노트

[SQL] SQL Server의 문자열에서 모든 공백을 제거

SQL

SQL Server의 문자열에서 모든 공백을 제거

2008 SQL Server의 문자열에서 모든 공백을 제거하는 가장 좋은 방법은 무엇입니까?

LTRIM (RTRIM ( 'A B')는) 오른쪽에있는 모든 공백을 제거하고 문자열의 왼쪽,하지만 나는 또한 중간에 공백을 제거해야합니다.

해결법

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

    1.간단하게 교체;

    간단하게 교체;

    SELECT REPLACE(fld_or_variable, ' ', '')
    

    편집하다: 다시 한번 확인하기 위해; 자사의 글로벌 대체 어떤 트림 필요 () 또는 하나 char 또는 VARCHAR에 대해 여러 공간에 대한 걱정이 없다 :

    create table #t (
        c char(8),
        v varchar(8))
    
    insert #t (c, v) values 
        ('a a'    , 'a a'    ),
        ('a a  '  , 'a a  '  ),
        ('  a a'  , '  a a'  ),
        ('  a a  ', '  a a  ')
    
    select
        '"' + c + '"' [IN], '"' + replace(c, ' ', '') + '"' [OUT]
    from #t  
    union all select
        '"' + v + '"', '"' + replace(v, ' ', '') + '"'
    from #t 
    

    결과

    IN             OUT
    ===================
    "a a     "     "aa"
    "a a     "     "aa"
    "  a a   "     "aa"
    "  a a   "     "aa"
    "a a"          "aa"
    "a a  "        "aa"
    "  a a"        "aa"
    "  a a  "      "aa"
    
  2. ==============================

    2.나는 대체 사용합니다

    나는 대체 사용합니다

    select REPLACE (' Hello , How Are You ?', ' ', '' )
    

    바꾸다

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

    3.이 테이블에 업데이트가있는 경우는 0 행에 영향을 미치는 될 때까지 당신이해야 할 모든이 업데이트를 여러 번 실행됩니다.

    이 테이블에 업데이트가있는 경우는 0 행에 영향을 미치는 될 때까지 당신이해야 할 모든이 업데이트를 여러 번 실행됩니다.

    update tableName
    set colName = REPLACE(LTRIM(RTRIM(colName)), '  ', ' ')
    where colName like '%  %'
    
  4. ==============================

    4.() 함수를 바꾸기 :

    () 함수를 바꾸기 :

    REPLACE(field, ' ', '')
    
  5. ==============================

    5.이 블로그에서 가져온 참조 :

    이 블로그에서 가져온 참조 :

    첫째, 샘플 테이블과 데이터를 작성합니다 :

    CREATE TABLE tbl_RemoveExtraSpaces
    (
         Rno INT
         ,Name VARCHAR(100)
    )
    GO
    
    INSERT INTO tbl_RemoveExtraSpaces VALUES (1,'I    am     Anvesh   Patel')
    INSERT INTO tbl_RemoveExtraSpaces VALUES (2,'Database   Research and     Development  ')
    INSERT INTO tbl_RemoveExtraSpaces VALUES (3,'Database    Administrator     ')
    INSERT INTO tbl_RemoveExtraSpaces VALUES (4,'Learning    BIGDATA    and       NOSQL ')
    GO
    

    스크립트 여분의 공백이없는 문자열을 선택합니다 :

    SELECT
         [Rno]
        ,[Name] AS StringWithSpace
        ,LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([Name],CHAR(32),'()'),')(',''),'()',CHAR(32)))) AS StringWithoutSpace
    FROM tbl_RemoveExtraSpaces
    

    결과:

    Rno         StringWithSpace                                 StringWithoutSpace
    ----------- -----------------------------------------  ---------------------------------------------
    1           I    am     Anvesh   Patel                      I am Anvesh Patel
    2           Database   Research and     Development         Database Research and Development
    3           Database    Administrator                       Database Administrator
    4           Learning    BIGDATA    and       NOSQL          Learning BIGDATA and NOSQL
    
  6. ==============================

    6.100 % 작업

    100 % 작업

    UPDATE table_name SET  "column_name"=replace("column_name", ' ', ''); //Remove white space
    
    UPDATE table_name SET  "column_name"=replace("column_name", '\n', ''); //Remove newline
    
    UPDATE table_name SET  "column_name"=replace("column_name", '\t', ''); //Remove all tab
    

    당신은 "COLUMN_NAME"또는 COLUMN_NAME을 사용할 수 있습니다

    감사

    Subroto 지역

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

    7.T-SQL http://msdn.microsoft.com/en-us/library/ms186862.aspx 교체

    T-SQL http://msdn.microsoft.com/en-us/library/ms186862.aspx 교체

    교체 (발, '', '')

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

    8.여러 공백이 문자열이있는 경우, 다음 제대로 작동하지 않을 수 있습니다 대체합니다. 이를 위해 다음과 같은 기능을 사용할 수 있습니다.

    여러 공백이 문자열이있는 경우, 다음 제대로 작동하지 않을 수 있습니다 대체합니다. 이를 위해 다음과 같은 기능을 사용할 수 있습니다.

    CREATE FUNCTION RemoveAllSpaces
    (
        @InputStr varchar(8000)
    )
    RETURNS varchar(8000)
    AS
    BEGIN
    declare @ResultStr varchar(8000)
    set @ResultStr = @InputStr
    while charindex(' ', @ResultStr) > 0
        set @ResultStr = replace(@InputStr, ' ', '')
    
    return @ResultStr
    END
    

    예:

    select dbo.RemoveAllSpaces('aa  aaa       aa aa                 a')
    

    산출:

    aaaaaaaaaa
    
  9. ==============================

    9.이 문자열의 공백을 제거하는 트릭을 수행합니다

    이 문자열의 공백을 제거하는 트릭을 수행합니다

    UPDATE
        tablename
    SET
        columnname = replace(columnname, ' ', '');
    
  10. ==============================

    10.모든 컬럼에 공백을 TRIM 할 필요가 그냥 경우에, 당신은 동적으로 할이 스크립트를 사용할 수 있습니다 :

    모든 컬럼에 공백을 TRIM 할 필요가 그냥 경우에, 당신은 동적으로 할이 스크립트를 사용할 수 있습니다 :

    --Just change table name
    declare @MyTable varchar(100)
    set @MyTable = 'MyTable'
    
    --temp table to get column names and a row id
    select column_name, ROW_NUMBER() OVER(ORDER BY column_name) as id into #tempcols from INFORMATION_SCHEMA.COLUMNS 
    WHERE   DATA_TYPE IN ('varchar', 'nvarchar') and TABLE_NAME = @MyTable
    
    declare @tri int
    select @tri = count(*) from #tempcols
    declare @i int
    select @i = 0
    declare @trimmer nvarchar(max)
    declare @comma varchar(1)
    set @comma = ', '
    
    --Build Update query
    select @trimmer = 'UPDATE [dbo].[' + @MyTable + '] SET '
    
    WHILE @i <= @tri 
    BEGIN
    
        IF (@i = @tri)
            BEGIN
            set @comma = ''
            END
        SELECT  @trimmer = @trimmer + CHAR(10)+ '[' + COLUMN_NAME + '] = LTRIM(RTRIM([' + COLUMN_NAME + ']))'+@comma
        FROM    #tempcols
        where id = @i
    
        select @i = @i+1
    END
    
    --execute the entire query
    EXEC sp_executesql @trimmer
    
    drop table #tempcols
    
  11. ==============================

    11.당신이 공백을 제거하려는 경우, -, 그리고 문자열에서 다른 텍스트는 다음을 사용 :

    당신이 공백을 제거하려는 경우, -, 그리고 문자열에서 다른 텍스트는 다음을 사용 :

    당신은 '718-378-4957'또는 같은 테이블에 휴대 전화 번호가 있다고 가정  '7183784957'당신은 교체하고 휴대 전화 번호는 다음 텍스트 다음 사용 얻을합니다.

    select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber
    

    결과 : - 7183784957을

  12. ==============================

    12.당신은 대체 기능에 문제가있는 경우에 그냥 팁은, 당신은 NCHAR에 대한 데이터 유형을 설정해야 할 수도 있습니다 (이 고정 길이 인 경우와는 작동하지 않습니다).

    당신은 대체 기능에 문제가있는 경우에 그냥 팁은, 당신은 NCHAR에 대한 데이터 유형을 설정해야 할 수도 있습니다 (이 고정 길이 인 경우와는 작동하지 않습니다).

  13. ==============================

    13.전체 위의 모든 답변을하려면 (이 문자의 전체 목록 https://en.wikipedia.org/wiki/Whitespace_character 참조) 공백 문자를 모두 처리하는 방법에 StackOverflow에 대한 자세한 글이 있습니다

    전체 위의 모든 답변을하려면 (이 문자의 전체 목록 https://en.wikipedia.org/wiki/Whitespace_character 참조) 공백 문자를 모두 처리하는 방법에 StackOverflow에 대한 자세한 글이 있습니다

  14. ==============================

    14.((COLUMN_NAME, CHAR (13) ''), CHAR (10) '으로 대체) 대체

    ((COLUMN_NAME, CHAR (13) ''), CHAR (10) '으로 대체) 대체

  15. ==============================

    15.이 나를 위해 유용합니다 :

    이 나를 위해 유용합니다 :

    CREATE FUNCTION dbo.TRIM(@String VARCHAR(MAX))
    RETURNS VARCHAR(MAX)
    BEGIN
        RETURN LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,CHAR(10),'[]'),CHAR(13),'[]'),char(9),'[]'),CHAR(32),'[]'),'][',''),'[]',CHAR(32))));
    END
    GO
    

    .

  16. ==============================

    16.오늘이 문제를했고 교체 / 트림 아래 trick..see했다.

    오늘이 문제를했고 교체 / 트림 아래 trick..see했다.

    update table_foo 
    set column_bar  = REPLACE(LTRIM(RTRIM(column_bar)), '  ', '')
    

    이전과 이후 :

    old-bad:  column_bar    |   New-fixed:   column_bar
           '  xyz  '        |                'xyz'   
           '  xyz  '        |                'xyz' 
           '  xyz  '        |                'xyz' 
           '  xyz  '        |                'xyz' 
           '  xyz  '        |                'xyz' 
           '  xyz  '        |                'xyz' 
    
  17. ==============================

    17.왼쪽과 오른쪽 문자열의 공백을 제거합니다. 중간 사용 공간이 교체 제거합니다.

    왼쪽과 오른쪽 문자열의 공백을 제거합니다. 중간 사용 공간이 교체 제거합니다.

    다음과 같이 제거 왼쪽 따라서 좌우 공간에서 공백을 제거 할 권리와 LTRIM ()에서 공백을 제거하는 RTRIM ()를 사용할 수 있습니다 :

    SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
    
  18. ==============================

    18.특정 문자를 대체 구문 :

    특정 문자를 대체 구문 :

    REPLACE ( string_expression , string_pattern , string_replacement )  
    

    문자열의 예를 들어 방법으로 대체 단어를 교체 "HelloReplaceThingsGoing"

    SELECT REPLACE('HelloReplaceThingsGoing','Replace','How');
    GO
    
  19. ==============================

    19.기능성 버전 (UDF)를 제거 공간, CR, LF, 탭 또는 그 구성.

    기능성 버전 (UDF)를 제거 공간, CR, LF, 탭 또는 그 구성.

    select Common.ufn_RemoveWhitespace(' 234   asdf   wefwef 3  x   ', default) as S
    

    검색 결과 : '234asdfwefwef3x'

    alter function Common.RemoveWhitespace
    (
        @pString nvarchar(max),
        @pWhitespaceCharsOpt nvarchar(max) = null -- default: tab, lf, cr, space 
    )  
    returns nvarchar(max) as
    /*--------------------------------------------------------------------------------------------------
        Purpose:   Compress whitespace
    
        Example:  select Common.ufn_RemoveWhitespace(' 234   asdf   wefwef 3  x   ', default) as s 
                  -- Result: 234asdfwefwef3x
    
        Modified    By          Description
        ----------  ----------- --------------------------------------------------------------------
        2018.07.24  crokusek    Initial Version 
      --------------------------------------------------------------------------------------------------*/ 
    begin    
        declare 
            @maxLen bigint = 1073741823, -- (2^31 - 1) / 2 (https://stackoverflow.com/a/4270085/538763)
            @whitespaceChars nvarchar(30) = coalesce(
                @pWhitespaceCharsOpt, 
                char(9) + char(10) + char(13) + char(32));  -- tab, lf, cr, space
    
        declare
            @whitespacePattern nvarchar(30) = '%[' + @whitespaceChars + ']%',
            @nonWhitespacePattern nvarchar(30) = '%[^' + @whitespaceChars + ']%',
            @previousString nvarchar(max) = '';
    
        while (@pString != @previousString)
        begin
            set @previousString = @pString;
    
            declare
                @whiteIndex int = patindex(@whitespacePattern, @pString);
    
            if (@whiteIndex > 0)
            begin                   
                declare 
                    @whitespaceLength int = nullif(patindex(@nonWhitespacePattern, substring(@pString, @whiteIndex, @maxLen)), 0) - 1;                
    
                set @pString = 
                    substring(@pString, 1, @whiteIndex - 1) + 
                    iif(@whiteSpaceLength > 0, substring(@pString, @whiteIndex + @whiteSpaceLength, @maxLen), '');
            end        
        end        
        return @pString;
    end
    go
    
  20. ==============================

    20.몇 가지 이유를 들어, 하나의 문자열마다 작동을 대체합니다. 나는이 "시험 MSP"와 같은 문자열을했고 나는 하나의 공간을 떠나고 싶어.

    몇 가지 이유를 들어, 하나의 문자열마다 작동을 대체합니다. 나는이 "시험 MSP"와 같은 문자열을했고 나는 하나의 공간을 떠나고 싶어.

    나는 그러나 일부 수정과, @Farhan 짓을하는 방법을 사용 :

    CREATE FUNCTION ReplaceAll
    (
        @OriginalString varchar(8000),
        @StringToRemove varchar(20),
        @StringToPutInPlace varchar(20)
    )
    RETURNS varchar(8000)
    AS
    BEGIN
    declare @ResultStr varchar(8000)
    set @ResultStr = @OriginalString
    while charindex(@StringToRemove, @ResultStr) > 0
        set @ResultStr = replace(@ResultStr, @StringToRemove, @StringToPutInPlace)
    
    return @ResultStr
    END
    

    그럼 난 이런 내 업데이트를 실행

    UPDATE tbTest SET Description = dbo.ReplaceAll(Description, '  ', ' ') WHERE ID = 14225
    

    그 때 나는이 결과를 가지고 : 테스트 MSP

    내가 그랬던 것처럼 경우에 누군가가 그것을 필요로하는 경우 여기에 게시.

    에 실행 : 2016 마이크로 소프트 SQL 서버 (SP2)

  21. ==============================

    21.확인하고 아래 스크립트를 사용해보십시오 (단위 테스트) -

    확인하고 아래 스크립트를 사용해보십시오 (단위 테스트) -

    --Declaring
    DECLARE @Tbl TABLE(col_1 VARCHAR(100));
    
    --Test Samples
    INSERT INTO @Tbl (col_1)
    VALUES
    ('  EY     y            
    Salem')
    , ('  EY     P    ort       Chennai   ')
    , ('  EY     Old           Park   ')
    , ('  EY   ')
    , ('  EY   ')
    ,(''),(null),('d                           
        f');
    
    SELECT col_1 AS INPUT,
        LTRIM(RTRIM(
        REPLACE(
        REPLACE(
        REPLACE(
        REPLACE(
        REPLACE(
            REPLACE(
            REPLACE(
            REPLACE(
            REPLACE(
            REPLACE(
            REPLACE(col_1,CHAR(10),' ')
            ,CHAR(11),' ')
            ,CHAR(12),' ')
            ,CHAR(13),' ')
            ,CHAR(14),' ')
            ,CHAR(160),' ')
            ,CHAR(13)+CHAR(10),' ')
        ,CHAR(9),' ')
        ,' ',CHAR(17)+CHAR(18))
        ,CHAR(18)+CHAR(17),'')
        ,CHAR(17)+CHAR(18),' ')
        )) AS [OUTPUT]
    FROM @Tbl;
    
  22. ==============================

    22.그 사람들이 REPLACE 하나의 함수 참조 유지 보인다. 아니면 심지어 많은 통화 기능을 대체합니다. 당신이 공간의 알 수없는 수의 동적 출력이있을 때, 그것은 일을 못해. 누구 정기적으로이 문제를 다룬다는 정상적으로 만하지 ALL, 하나의 공백을 제거합니다 REPLACE 것을 알고있다. 그리고 LTRIM 및 RTRIM 같은 문제를 갖고있는 것 같다. 마이크로 소프트에 둡니다. 여기 ALL CHAR (32)의 값 (공간)을 제거하는 WHILE 루프를 사용하는 샘플 출력이다.

    그 사람들이 REPLACE 하나의 함수 참조 유지 보인다. 아니면 심지어 많은 통화 기능을 대체합니다. 당신이 공간의 알 수없는 수의 동적 출력이있을 때, 그것은 일을 못해. 누구 정기적으로이 문제를 다룬다는 정상적으로 만하지 ALL, 하나의 공백을 제거합니다 REPLACE 것을 알고있다. 그리고 LTRIM 및 RTRIM 같은 문제를 갖고있는 것 같다. 마이크로 소프트에 둡니다. 여기 ALL CHAR (32)의 값 (공간)을 제거하는 WHILE 루프를 사용하는 샘플 출력이다.

    DECLARE @INPUT_VAL  VARCHAR(8000)
    DECLARE @OUTPUT_VAL VARCHAR(8000)
    
    SET @INPUT_VAL = '      C               A                         '
    SET @OUTPUT_VAL = @INPUT_VAL
    WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
        SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
    END
    
    PRINT 'START:' + @INPUT_VAL + ':END'
    PRINT 'START:' + @OUTPUT_VAL + ':END'
    

    여기에 위의 코드의 출력입니다 :

    START:      C               A                         :END
    START:CA:END
    

    이제 한 단계 더 걸릴하고 UPDATE 또는 SELECT 문을 사용하는 UDF로 변경합니다.

    CREATE FUNCTION udf_RemoveSpaces (@INPUT_VAL    VARCHAR(8000))
    RETURNS VARCHAR(8000)
    AS 
    BEGIN
    
    DECLARE @OUTPUT_VAL VARCHAR(8000)
    SET @OUTPUT_VAL = @INPUT_VAL
    -- ITTERATE THROUGH STRING TO LOOK FOR THE ASCII VALUE OF SPACE (CHAR(32)) REPLACE IT WITH BLANK, NOT NULL
    WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
        SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
    END
    
    RETURN @OUTPUT_VAL
    END
    

    그런 다음 SELECT 또는 INSERT 문에서 기능을 활용 :

    UPDATE A
    SET STATUS_REASON_CODE = WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
    FROM WHATEVER..ACCT_INFO A
    WHERE A.SOMEVALUE = @SOMEVALUE
    
    INSERT INTO SOMETABLE
    (STATUS_REASON_CODE)
    SELECT WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
    FROM WHATEVER..ACCT_INFO A
    WHERE A.SOMEVALUE = @SOMEVALUE
    
  23. from https://stackoverflow.com/questions/10432086/remove-all-spaces-from-a-string-in-sql-server by cc-by-sa and MIT license