[SQL] 문자열 SQL 서버에서 번호 제거
SQL문자열 SQL 서버에서 번호 제거
나는 부분 문자열 검색을 수행하고자하는 큰 데이터베이스를 가지고있다. 사용자가 문자를 입력합니다 :의 joebloggs를.
인수 위해서 나는 데이터베이스에 이름 조 (23 개) BLO GGS 4가 있다면. 나는 A-Z가 아닌 다른 이름으로 모든 것을 제거하려는.
나는이 (이름, '', '')를 제거 공간과 이름을 투자 할 UPPER () 함수 기능을 교체해야합니다.
A-Z 이외의 대체 정규식의 측면에 의해 어쩌면 더 효율적으로 빠른 방법이있다. 나는 데이터베이스의 값을 변경할 수 없습니다.
해결법
-
==============================
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.이 사람은 나를 위해 작동
이 사람은 나를 위해 작동
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.조회는 아래를보십시오. 어디에 발은 문자열 또는 열 이름입니다.
조회는 아래를보십시오. 어디에 발은 문자열 또는 열 이름입니다.
CASE WHEN PATINDEX('%[a-z]%', REVERSE(val)) > 1 THEN LEFT(val, LEN(val) - PATINDEX('%[a-z]%', REVERSE(val)) + 1) ELSE '' END
-
==============================
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.약간의 수정을 @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.첫 번째 숫자는 (내 사용 사례에 적합했다) 후 모든 것을 제거 LEFT (필드 PATINDEX ( '% [0-9] %'필드 + '0') - 1)
첫 번째 숫자는 (내 사용 사례에 적합했다) 후 모든 것을 제거 LEFT (필드 PATINDEX ( '% [0-9] %'필드 + '0') - 1)
후행 숫자를 제거합니다 : LEFT (필드 렌 (필드) + 1 PATINDEX ( '% [^ 0-9] %', 역방향 ( '0'+ 필드))
-
==============================
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
키는 계산 열 인덱스 그것을로 사용하는 것이다. 정말 데이터베이스가 당신의 큰 테이블의 모든 행에 대해 쿼리를 실행할 때마다 그것을 실행하는 경우이 기능을 얼마나 빨리 문제가되지 않습니다.
from https://stackoverflow.com/questions/13240298/remove-numbers-from-string-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어디 연습에서 온 "(에서 ... 1 선택)을 존재"는 무엇입니까? (0) | 2020.06.10 |
---|---|
[SQL] 업데이트 문에서 중복 데이터 (0) | 2020.06.10 |
[SQL] 오라클 DATEADD () 함수에 대한 해당 (0) | 2020.06.10 |
[SQL] 하나의 문에서 순서에서 쿼리 여러 NEXTVAL (0) | 2020.06.10 |
[SQL] 나는 SQL_VARIANT 데이터 유형을 사용해야합니까? (0) | 2020.06.10 |