[SQL] T-SQL 트림 & NBSP (및 기타 영숫자가 아닌 문자)
SQLT-SQL 트림 & NBSP (및 기타 영숫자가 아닌 문자)
우리는 때때로 끝에 NBSP 문자 및 나타납니다 일부 입력 데이터를 가지고있다.
데이터는 소스 시스템 VARCHAR로 ()와 소수점으로 이러한 문자의 B / C 실패 캐스팅에 우리의 시도에서 제공됩니다.
우리는 같은 일을 할 수밖에 있도록 LTRIM 및 RTRIM는 문자를 제거하지 마십시오 :
UPDATE myTable
SET myColumn = replace(myColumn,char(160),'')
WHERE charindex(char(160),myColumn) > 0
이것을 & NBSP에 대한 작동하지만 문자가 아닌 숫자 (또는이 경우 숫자에서)이 작업을 수행 할 수있는 좋은 방법은 무엇입니까?
해결법
-
==============================
1.이 페이지는 영숫자가 아닌 문자를 제거하는 방법의 샘플이 있습니다
이 페이지는 영숫자가 아닌 문자를 제거하는 방법의 샘플이 있습니다
-- Put something like this into a user function: DECLARE @cString VARCHAR(32) DECLARE @nPos INTEGER SELECT @cString = '90$%45623 *6%}~:@' SELECT @nPos = PATINDEX('%[^0-9]%', @cString) WHILE @nPos > 0 BEGIN SELECT @cString = STUFF(@cString, @nPos, 1, '') SELECT @nPos = PATINDEX('%[^0-9]%', @cString) END SELECT @cString
-
==============================
2.이것은 모든 영숫자가 아닌 문자를 제거합니다
이것은 모든 영숫자가 아닌 문자를 제거합니다
CREATE FUNCTION [dbo].[fnRemoveBadCharacter] ( @BadString nvarchar(20) ) RETURNS nvarchar(20) AS BEGIN DECLARE @nPos INTEGER SELECT @nPos = PATINDEX('%[^a-zA-Z0-9_]%', @BadString) WHILE @nPos > 0 BEGIN SELECT @BadString = STUFF(@BadString, @nPos, 1, '') SELECT @nPos = PATINDEX('%[^a-zA-Z0-9_]%', @BadString) END RETURN @BadString END
기능을 같이 사용합니다 :
UPDATE TableToUpdate SET ColumnToUpdate = dbo.fnRemoveBadCharacter(ColumnToUpdate) WHERE whatever
-
==============================
3.테이블이 어떻게 채워지? 이 SQL 더 나은 방법이 스크럽 할 수 있지만 int와 열 유형을 변경하는 것입니다 그리고 그것은 데이터베이스 (SSIS)에로드되기 전에 데이터를 문질러. 이 옵션인가?
테이블이 어떻게 채워지? 이 SQL 더 나은 방법이 스크럽 할 수 있지만 int와 열 유형을 변경하는 것입니다 그리고 그것은 데이터베이스 (SSIS)에로드되기 전에 데이터를 문질러. 이 옵션인가?
-
==============================
4.대규모 데이터 세트를 위해 나는이 작동하는지 확인 ASCII 값으로 더 좋은 행운이 있었다. 나는 매개 변수에 따라 숫자 또는 숫자 만 알파를 유지하는 옵션을 추가했습니다.
대규모 데이터 세트를 위해 나는이 작동하는지 확인 ASCII 값으로 더 좋은 행운이 있었다. 나는 매개 변수에 따라 숫자 또는 숫자 만 알파를 유지하는 옵션을 추가했습니다.
--CleanType 1 - Remove all non alpanumeric -- 2 - Remove only alpha -- 3 - Remove only numeric CREATE FUNCTION [dbo].[fnCleanString] ( @InputString varchar(8000) , @CleanType int , @LeaveSpaces bit ) RETURNS varchar(8000) AS BEGIN -- // Declare variables -- =========================================================== DECLARE @Length int , @CurLength int = 1 , @ReturnString varchar(8000)='' SELECT @Length = len(@InputString) -- // Begin looping through each char checking ASCII value -- =========================================================== WHILE (@CurLength <= (@Length+1)) BEGIN IF (ASCII(SUBSTRING(@InputString,@CurLength,1)) between 48 and 57 AND @CleanType in (1,3) ) or (ASCII(SUBSTRING(@InputString,@CurLength,1)) between 65 and 90 AND @CleanType in (1,2) ) or (ASCII(SUBSTRING(@InputString,@CurLength,1)) between 97 and 122 AND @CleanType in (1,2) ) or (ASCII(SUBSTRING(@InputString,@CurLength,1)) = 32 AND @LeaveSpaces = 1 ) BEGIN SET @ReturnString = @ReturnString + SUBSTRING(@InputString,@CurLength,1) END SET @CurLength = @CurLength + 1 END RETURN @ReturnString END
-
==============================
5.모바일은 플러스 (+)로 시작 수 있다면이 같은 기능을 사용합니다
모바일은 플러스 (+)로 시작 수 있다면이 같은 기능을 사용합니다
CREATE FUNCTION [dbo].[Mobile_NoAlpha](@Mobile VARCHAR(1000)) RETURNS VARCHAR(1000) AS BEGIN DECLARE @StartsWithPlus BIT = 0 --check if the mobile starts with a plus(+) IF LEFT(@Mobile, 1) = '+' BEGIN SET @StartsWithPlus = 1 --Take out the plus before using the regex to eliminate invalid characters SET @Mobile = RIGHT(@Mobile, LEN(@Mobile)-1) END WHILE PatIndex('%[^0-9]%', @Mobile) > 0 SET @Mobile = Stuff(@Mobile, PatIndex('%[^0-9]%', @Mobile), 1, '') IF @StartsWithPlus = 1 SET @Mobile = '+' + @Mobile RETURN @Mobile END
from https://stackoverflow.com/questions/52315/t-sql-trim-nbsp-and-other-non-alphanumeric-characters by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 하나의 열에 배열 또는 여러 값을 저장하는 방법 (0) | 2020.05.13 |
---|---|
[SQL] 당신은 어떻게 당신이 저장된 프로 시저에서 반환 데이터 집합의 테이블 이름을 지정할 수 있습니다? (0) | 2020.05.13 |
[SQL] IN 문을 오라클 매개 변수? (0) | 2020.05.13 |
[SQL] 액세스 2013 SQL에 TRANSFORM 및 PIVOT (0) | 2020.05.13 |
[SQL] 분할 쉼표 오라클 SQL 쿼리를 통해 행의 열 값을 분리 (0) | 2020.05.13 |