복붙노트

[SQL] 어떻게 SQL Server의 문자열에서 공백 문자를 제거

SQL

어떻게 SQL Server의 문자열에서 공백 문자를 제거

나는 작동하지 않는 SQL하지만 LTRIM 및 RTRIM 함수의 문자열에서 공백을 제거하기 위해 노력하고있어?

기둥:

[ProductAlternateKey] [nvarchar](25) COLLATE Latin1_General_CS_AS NULL

질문:

select REPLACE(ProductAlternateKey, ' ', '@'),
       LEN(ProductAlternateKey),
       LTRIM(RTRIM(ProductAlternateKey))      AS LRTrim,
       LEN(LTRIM(RTRIM(ProductAlternateKey))) AS LRLen,
       ASCII(RIGHT(ProductAlternateKey, 1))   AS ASCIIR,
       ASCII(LEFT(ProductAlternateKey, 1))    AS ASCIIL,
       ProductAlternateKey
from DimProducts
where ProductAlternateKey  like '46783815%'

결과:

|  COLUMN_0 | COLUMN_1 | LRTrim | LRLen | ASCIIR | ASCIIL | PRODUCTALTERNATEKEY |
---------------------------------------------------------------------------------
|  46783815 |        8 | 46783815|     8|   53   |   52   |            46783815 |
| 46783815  |        10|46783815  |   10|   10   |   52   |           46783815  |

LTRIM 및 RTRIM은 "입력"처럼 작동하지 않는 경우는 다른 상징이 될 수 있습니까?

해결법

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

    1.당신이 2 행의 오른쪽 대부분의 문자가 줄 바꿈 또는 ASCII 문자 10 것을 볼 수 있습니다 ASCII (RIGHT (ProductAlternateKey, 1)) 사용.

    당신이 2 행의 오른쪽 대부분의 문자가 줄 바꿈 또는 ASCII 문자 10 것을 볼 수 있습니다 ASCII (RIGHT (ProductAlternateKey, 1)) 사용.

    이것은 표준에서는 LTrim RTRIM 함수를 사용하여 제거 할 수 없습니다.

    당신은 그러나) ''() (10 ProductAlternateKey, CHAR 교체 (사용할 수 있습니다

    또한 캐리지 리턴 및 탭을 설명 할 수 있습니다. 이 세 가지 (라인 피드, 캐리지 리턴 및 탭) 일반적인 범죄자이며, 다음으로 제거 할 수 있습니다 :

    LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(ProductAlternateKey, CHAR(10), ''), CHAR(13), ''), CHAR(9), '')))
    

    당신이 함께 제거 할 수 없습니다 더 이상 "공백"문자가 발생하면 위의 다음 하나 아래의 모든 시도 :

    --NULL
    Replace([YourString],CHAR(0),'');
    --Horizontal Tab
    Replace([YourString],CHAR(9),'');
    --Line Feed
    Replace([YourString],CHAR(10),'');
    --Vertical Tab
    Replace([YourString],CHAR(11),'');
    --Form Feed
    Replace([YourString],CHAR(12),'');
    --Carriage Return
    Replace([YourString],CHAR(13),'');
    --Column Break
    Replace([YourString],CHAR(14),'');
    --Non-breaking space
    Replace([YourString],CHAR(160),'');
    

    잠재적 인 공백 문자의이 목록은 같은 함수를 작성하는 데 사용할 수 있습니다 :

    Create Function [dbo].[CleanAndTrimString] 
    (@MyString as varchar(Max))
    Returns varchar(Max)
    As
    Begin
        --NULL
        Set @MyString = Replace(@MyString,CHAR(0),'');
        --Horizontal Tab
        Set @MyString = Replace(@MyString,CHAR(9),'');
        --Line Feed
        Set @MyString = Replace(@MyString,CHAR(10),'');
        --Vertical Tab
        Set @MyString = Replace(@MyString,CHAR(11),'');
        --Form Feed
        Set @MyString = Replace(@MyString,CHAR(12),'');
        --Carriage Return
        Set @MyString = Replace(@MyString,CHAR(13),'');
        --Column Break
        Set @MyString = Replace(@MyString,CHAR(14),'');
        --Non-breaking space
        Set @MyString = Replace(@MyString,CHAR(160),'');
    
        Set @MyString = LTRIM(RTRIM(@MyString));
        Return @MyString
    End
    Go
    

    다음과 같이 다음 사용할 수있는 :

    Select 
        dbo.CleanAndTrimString(ProductAlternateKey) As ProductAlternateKey
    from DimProducts
    
  2. ==============================

    2.이 경우, 접두사 / 접미사에 공간이 없습니다. 제 1 회 행은 확인을 보인다. 2 행의 내용에 대해 다음을 수행하십시오.

    이 경우, 접두사 / 접미사에 공간이 없습니다. 제 1 회 행은 확인을 보인다. 2 행의 내용에 대해 다음을 수행하십시오.

    ASCII(RIGHT(ProductAlternateKey, 1))
    

    ASCII(LEFT(ProductAlternateKey, 1))
    
  3. ==============================

    3.텍스트, 제발 확인 후 2 공백이있을 수 있습니다. 또한 바로 LTRIM 및 RTRIM 기능을 사용할 수 있습니까?

    텍스트, 제발 확인 후 2 공백이있을 수 있습니다. 또한 바로 LTRIM 및 RTRIM 기능을 사용할 수 있습니까?

    LTRIM(RTRIM(ProductAlternateKey))
    

    아마 여분의 공간은 일반적인 공간 (ASCII 32, 부드러운 공간) 아닌가요? 어쩌면 그들은, ASCII 160 "하드 공간"인가?

    ltrim(rtrim(replace(ProductAlternateKey, char(160), char(32))))
    
  4. ==============================

    4.이건 어때요?

    이건 어때요?

    CASE WHEN ProductAlternateKey is NOT NULL THEN
    CONVERT(NVARCHAR(25), LTRIM(RTRIM(ProductAlternateKey))) 
    FROM DimProducts
    where ProductAlternateKey  like '46783815%'
    
  5. ==============================

    5.눈에 보이지 않는 문자처럼 보이는 -

    눈에 보이지 않는 문자처럼 보이는 -

    ALT+255
    

    이 시도

    select REPLACE(ProductAlternateKey, ' ', '@')
    --type ALT+255 instead of space for the second expression in REPLACE 
    from DimProducts
    where ProductAlternateKey  like '46783815%'
    

    주권

    편집 : () 결과를 ASCII를 바탕으로, 시도의 ALT + 10 - 사용 숫자 키패드

  6. ==============================

    6.SQL 컬럼 데이터를 새로운 라인 문자를 제거

    SQL 컬럼 데이터를 새로운 라인 문자를 제거

    Update a set  a.CityName=Rtrim(Ltrim(REPLACE(REPLACE(a.CityName,CHAR(10),' '),CHAR(13),' ')))
    ,a.postalZone=Rtrim(Ltrim(REPLACE(REPLACE(a.postalZone,CHAR(10),' '),CHAR(13),' ')))  
    From tAddress a 
    inner Join  tEmployees p  on a.AddressId =p.addressId 
    Where p.MigratedID is not null and p.AddressId is not null AND
    (REPLACE(REPLACE(a.postalZone,CHAR(10),'Y'),CHAR(13),'X') Like 'Y%' OR REPLACE(REPLACE(a.CityName,CHAR(10),'Y'),CHAR(13),'X') Like 'Y%')
    
  7. from https://stackoverflow.com/questions/14211346/how-to-remove-white-space-characters-from-a-string-in-sql-server by cc-by-sa and MIT license