복붙노트

[SQL] SQL 방법은 하나의 공백으로 반복 공백을 대체

SQL

SQL 방법은 하나의 공백으로 반복 공백을 대체

이 일을 더 우아한 방법이있다. 나는 하나의 공백으로 반복 공백을 대체 할 ....

   declare @i int

    set @i=0
    while @i <= 20
    begin
        update myTable
        set myTextColumn = replace(myTextColumn, '  ', ' ')
        set @i=@i+1
    end

(그 SQL 서버 2000 -하지만 일반적인 SQL을 선호하는 것)

해결법

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

    1.여기 세 적용을 대체하여 하나의 공간으로 복수의 공간을 축소하는 간단한 세트 기반 방법이다.

    여기 세 적용을 대체하여 하나의 공간으로 복수의 공간을 축소하는 간단한 세트 기반 방법이다.

    DECLARE @myTable TABLE (myTextColumn VARCHAR(50))
    
    INSERT INTO @myTable VALUES ('0Space')
    INSERT INTO @myTable VALUES (' 1 Spaces 1 Spaces. ')
    INSERT INTO @myTable VALUES ('  2  Spaces  2  Spaces.  ')
    INSERT INTO @myTable VALUES ('   3   Spaces  3   Spaces.   ')
    INSERT INTO @myTable VALUES ('    4    Spaces  4    Spaces.    ')
    INSERT INTO @myTable VALUES ('     5     Spaces  5     Spaces.     ')
    INSERT INTO @myTable VALUES ('      6      Spaces  6      Spaces.      ')
    
    select replace(
              replace(
                 replace(
                    LTrim(RTrim(myTextColumn)), ---Trim the field
                 '  ',' |'),                    ---Mark double spaces
              '| ',''),                         ---Delete double spaces offset by 1
           '|','')                              ---Tidy up
           AS SingleSpaceTextColumn
     from @myTable
    

    귀하의 업데이트 문은 지금 기준으로 설정할 수 있습니다 :

     update @myTable
        set myTextColumn = replace(
                              replace(
                                 replace(
                                    LTrim(RTrim(myTextColumn)),
                                 '  ',' |'),
                              '| ',''),
                           '|','')  
    

    절은 업데이트 할 필요가 아니면 이중 공백이있는 경우에만 행에 업데이트를 제한하는 적절한를 사용합니다.

    예:

    where 1<=Patindex('%  %', myTextColumn)
    

    나는이 방법에 외부 쓰기를 발견 : 하나와 여러 공간 교체

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

    2.이 작품 :

    이 작품 :

    UPDATE myTable
    SET myTextColumn =
        REPLACE(
            REPLACE(
                REPLACE(myTextColumn
                    ,'  ',' '+CHAR(1)) -- CHAR(1) is unlikely to appear
            ,CHAR(1)+' ','')
        ,CHAR(1),'')
    WHERE myTextColumn LIKE '%  %'
    

    전체 세트 기초 루프 없음.

    우리는 특이한 성격과 공백으로 두 공간을 대체 그래서. 우리가 이상한 문자 X를 호출 할 경우, 5 개 공간이 될 'X X'와 6 개 공간 'X X X'가된다. 그런 다음 우리는 빈 문자열로 'X'를 대체합니다. 그래서 5 개 공간 '이 될'6 개 공간이 될 'X'. 그런 경우 공간의 짝수가 있었다, 우리는 하나의 공간을두고, 나머지 'X의를 제거합니다.

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

    3.

    select 
        string = replace(
                    replace(
                        replace(' select   single       spaces',' ','<>')
                        ,'><','')
                    ,'<>',' ')
    

    T-SQL에서 하나의 공간 중복 공간을 교체

  4. ==============================

    4.

    SELECT 'starting...' --sets @@rowcount
    WHILE @@rowcount <> 0
        update myTable
        set myTextColumn = replace(myTextColumn, '  ', ' ')
        where myTextColumn like '%  %'
    
  5. ==============================

    5.아니 매우 SET 기반하지만 간단한 WHILE 트릭을 할 것입니다.

    아니 매우 SET 기반하지만 간단한 WHILE 트릭을 할 것입니다.

    CREATE TABLE #myTable (myTextColumn VARCHAR(32))
    
    INSERT INTO #myTable VALUES ('NoSpace')
    INSERT INTO #myTable VALUES ('One Space')
    INSERT INTO #myTable VALUES ('Two  Spaces')
    INSERT INTO #myTable VALUES ('Multiple    Spaces    .')
    
    WHILE EXISTS (SELECT * FROM #myTable WHERE myTextColumn LIKE '%  %')
      UPDATE  #myTable 
      SET     myTextColumn = REPLACE(myTextColumn, '  ', ' ') 
      WHERE   myTextColumn LIKE '%  %'
    
    SELECT * FROM #myTable
    
    DROP TABLE #myTable
    
  6. ==============================

    6.하나 문자 하나를 통해 단계 및 이전 문자의 기록을 유지한다. 현재 문자가 공간이며, 마지막 문자가 공백 인 경우, 물건.

    하나 문자 하나를 통해 단계 및 이전 문자의 기록을 유지한다. 현재 문자가 공간이며, 마지막 문자가 공백 인 경우, 물건.

    CREATE FUNCTION [dbo].[fnRemoveExtraSpaces]  (@Number AS varchar(1000))
    Returns Varchar(1000)
    As
    Begin
    Declare @n int  -- Length of counter
    Declare @old char(1)
    
    Set @n = 1
    --Begin Loop of field value
    While @n <=Len (@Number)
        BEGIN
         If Substring(@Number, @n, 1) = ' ' AND @old = ' '
          BEGIN
            Select @Number = Stuff( @Number , @n , 1 , '' )
          END
         Else
          BEGIN
           SET @old = Substring(@Number, @n, 1)
           Set @n = @n + 1
          END
        END
    Return @number
    END
    GO
    
    
    select [dbo].[fnRemoveExtraSpaces]('xxx     xxx     xxx    xxx')
    
  7. ==============================

    7.

    create table blank(
    field_blank char(100))
    
    insert into blank values('yyy      yyyy')
    insert into blank values('xxxx    xxxx')
    insert into blank values ('xxx    xxx')
    insert into blank values ('zzzzzz zzzzz')
    
    update blank 
    set field_blank = substring(field_blank,1,charindex(' ',field_blank)-1) + ' ' + ltrim(substring(field_blank,charindex(' ',field_blank) + 1,len(field_blank)))
    where CHARINDEX (' ' , rtrim(field_blank)) > 1
    
    select * from blank
    
  8. ==============================

    8.나를 위해 위의 예는 거의 트릭을했지만 좀 더 안정적이고 테이블 또는 열 또는 반복 일련 번호의 독립적 인 무언가를 필요로했다. 그래서 위의 쿼리의 대부분에서 내 수정입니다.

    나를 위해 위의 예는 거의 트릭을했지만 좀 더 안정적이고 테이블 또는 열 또는 반복 일련 번호의 독립적 인 무언가를 필요로했다. 그래서 위의 쿼리의 대부분에서 내 수정입니다.

    CREATE FUNCTION udfReplaceAll 
    (
        @OriginalText NVARCHAR(MAX),
        @OldText NVARCHAR(MAX),
        @NewText NVARCHAR(MAX)
    )
    RETURNS NVARCHAR(MAX)
    AS
    BEGIN
        WHILE (@OriginalText LIKE '%' + @OldText + '%')
        BEGIN
            SET @OriginalText = REPLACE(@OriginalText,@OldText,@NewText)
        END
    
        RETURN @OriginalText
    END
    GO
    
  9. ==============================

    9.이 같은 데이터를 말할 수 있습니다

    이 같은 데이터를 말할 수 있습니다

    Table name : userdata Field: id, comment, status, 
    
     id,  "I love -- -- - -spaces  -- -    my INDIA" , "Active" <br>
     id,  "I love -- -- - -spaces  -- -    my INDIA" , "Active" <br>
     id,  "I love -- -- - -spaces  -- -    my INDIA" , "Active" <br>
     id,  "I love -- -- - -spaces  -- -    my INDIA" , "Active" <br>
    

    그래서 그냥이 좋아해요

    update userdata set comment=REPLACE(REPLACE(comment," ","-SPACEHERE-"),"-SPACEHERE"," ");
    

    내가 테스트하지 않은,하지만 난이 일 것이라 생각합니다.

  10. ==============================

    10.여기에 간단한 솔루션입니다 :)

    여기에 간단한 솔루션입니다 :)

        update myTable
        set myTextColumn = replace(replace(replace(LTrim(RTrim(myTextColumn )),' ','<>'),'><',''),'<>',' ')
    
  11. ==============================

    11.이 시도:

    이 시도:

    UPDATE Ships
    SET name = REPLACE(REPLACE(REPLACE(name, '  ', ' ' + CHAR(1)), CHAR(1) + ' ', ''), CHAR(1), '')
    WHERE name LIKE '%  %'
    
  12. ==============================

    12.

    REPLACE(REPLACE(REPLACE(myTextColumn,' ',' %'),'% ',''),'%','')
    

    문 위의 하나의 공간에 여러 공간을 교체하기위한 굉장히했다. 선택적으로 초기에 제거 공간으로 LTRIM 및 RTRIM을 추가합니다.

    여기에서있어 : http://burnignorance.com/database-tips-and-tricks/remove-multiple-spaces-from-a-string-using-sql-server/

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

    13.

    WHILE
     (SELECT count(myIDcolumn) 
      from myTable where myTextColumn like '%  %') > 0
    BEGIN
      UPDATE myTable 
      SET myTextColumn = REPLACE(myTextColumn ,'  ',' ')
    END
    
  14. ==============================

    14.시도 해봐:

    시도 해봐:

    CREATE OR REPLACE FUNCTION REM_SPACES (TEXTO VARCHAR(2000))
    
        RETURNS VARCHAR(2000)
    
        LANGUAGE SQL
    
        READS SQL DATA
    BEGIN
    
        SET TEXTO = UPPER(LTRIM(RTRIM(TEXTO)));
    
        WHILE LOCATE('  ',TEXTO,1) >= 1 DO
            SET TEXTO = REPLACE(TEXTO,'  ',' ');
        END WHILE;
    
    RETURN TEXTO;
    
    END
    
  15. ==============================

    15.

    Update myTable set myTextColumn = replace(myTextColumn, '  ', ' ');
    

    위의 쿼리는 하나의 빈 공간이 모두 이중 빈 공간을 제거합니다

    그러나이 한 번만 작동합니다.

  16. from https://stackoverflow.com/questions/2182877/sql-method-to-replace-repeating-blanks-with-single-blanks by cc-by-sa and MIT license