복붙노트

[SQL] 문자열 SQL 서버에서 번호 제거

SQL

문자열 SQL 서버에서 번호 제거

나는 부분 문자열 검색을 수행하고자하는 큰 데이터베이스를 가지고있다. 사용자가 문자를 입력합니다 :의 joebloggs를.

인수 위해서 나는 데이터베이스에 이름 조 (23 개) BLO GGS 4가 있다면. 나는 A-Z가 아닌 다른 이름으로 모든 것을 제거하려는.

나는이 (이름, '', '')를 제거 공간과 이름을 투자 할 UPPER () 함수 기능을 교체해야합니다.

A-Z 이외의 대체 정규식의 측면에 의해 어쩌면 더 효율적으로 빠른 방법이있다. 나는 데이터베이스의 값을 변경할 수 없습니다.

해결법

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

    1.첫번째 옵션 -

    첫번째 옵션 -

    당신은 둥지 깊은 32 레벨 () 함수를 대체 할 수 있습니다. 그것은 빠르게 실행됩니다.

    REPLACE
    (REPLACE
    (REPLACE
    (REPLACE
    (REPLACE
    (REPLACE
    (REPLACE
    (REPLACE
    (REPLACE
    (REPLACE (@str, '0', ''),
    '1', ''),
    '2', ''),
    '3', ''),
    '4', ''),
    '5', ''),
    '6', ''),
    '7', ''),
    '8', ''),
    '9', '')
    

    2 옵션 - 의 역 할 -

    숫자 + SQL에서 비 산술적 데이터를 제거

    3 옵션 - 당신은 정규식을 사용하려는 경우

    그때 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=27205

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

    2.이 사람은 나를 위해 작동

    이 사람은 나를 위해 작동

    CREATE Function [dbo].[RemoveNumericCharacters](@Temp VarChar(1000))
    Returns VarChar(1000)
    AS
    Begin
    
        Declare @NumRange as varchar(50) = '%[0-9]%'
        While PatIndex(@NumRange, @Temp) > 0
            Set @Temp = Stuff(@Temp, PatIndex(@NumRange, @Temp), 1, '')
    
        Return @Temp
    End
    

    그리고 당신과 같이 사용할 수 있습니다

    SELECT dbo.[RemoveNumericCharacters](Name) FROM TARGET_TABLE
    
  3. ==============================

    3.조회는 아래를보십시오. 어디에 발은 문자열 또는 열 이름입니다.

    조회는 아래를보십시오. 어디에 발은 문자열 또는 열 이름입니다.

    CASE WHEN PATINDEX('%[a-z]%', REVERSE(val)) > 1
                    THEN LEFT(val, LEN(val) - PATINDEX('%[a-z]%', REVERSE(val)) + 1)
                ELSE '' END
    
  4. ==============================

    4.재귀 CTE를 사용하는 또 하나의 방법 ..

    재귀 CTE를 사용하는 또 하나의 방법 ..

    declare @string varchar(100)
    set @string ='te165st1230004616161616'
    
    ;With cte
    as
    (
    select @string as string,0  as n
    union all
    select cast(replace(string,n,'') as varchar(100)),n+1
    from cte
    where n<9
    )
    select top 1 string from cte
    order by n desc
    
    
    **Output:**   
      test
    
  5. ==============================

    5.약간의 수정을 @Jatin 응답의 일부를 인용,

    약간의 수정을 @Jatin 응답의 일부를 인용,

    귀하의 경우 문이를 사용 :

        SELECT * FROM .... etc.
            Where 
             REPLACE
            (REPLACE
            (REPLACE
            (REPLACE
            (REPLACE
            (REPLACE
            (REPLACE
            (REPLACE
            (REPLACE
            (REPLACE (Name, '0', ''),
            '1', ''),
            '2', ''),
            '3', ''),
            '4', ''),
            '5', ''),
            '6', ''),
            '7', ''),
            '8', ''),
            '9', '') = P_SEARCH_KEY
    
  6. ==============================

    6.첫 번째 숫자는 (내 사용 사례에 적합했다) 후 모든 것을 제거 LEFT (필드 PATINDEX ( '% [0-9] %'필드 + '0') - 1)

    첫 번째 숫자는 (내 사용 사례에 적합했다) 후 모든 것을 제거 LEFT (필드 PATINDEX ( '% [0-9] %'필드 + '0') - 1)

    후행 숫자를 제거합니다 : LEFT (필드 렌 (필드) + 1 PATINDEX ( '% [^ 0-9] %', 역방향 ( '0'+ 필드))

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

    7.아니 테스트,하지만 당신은 이런 식으로 뭔가를 할 수 :

    아니 테스트,하지만 당신은 이런 식으로 뭔가를 할 수 :

    Create Function dbo.AlphasOnly(@s as varchar(max)) Returns varchar(max) As
    Begin
      Declare @Pos int = 1
      Declare @Ret varchar(max) = null
      If @s Is Not Null
      Begin
        Set @Ret = ''
        While @Pos <= Len(@s)
        Begin
          If SubString(@s, @Pos, 1) Like '[A-Za-z]'
          Begin
            Set @Ret = @Ret + SubString(@s, @Pos, 1)
          End
          Set @Pos = @Pos + 1
        End
      End
      Return @Ret
    End
    

    키는 계산 열 인덱스 그것을로 사용하는 것이다. 정말 데이터베이스가 당신의 큰 테이블의 모든 행에 대해 쿼리를 실행할 때마다 그것을 실행하는 경우이 기능을 얼마나 빨리 문제가되지 않습니다.

  8. from https://stackoverflow.com/questions/13240298/remove-numbers-from-string-sql-server by cc-by-sa and MIT license