2008-09-19 5 views
1

내 데이터베이스 (SQL 2005)에서 나는 주석이 들어있는 필드가 있지만 주석에 나는 ID가 있으며 나는 단지 ID를 제거하고 가능한 경우 변환하려고합니다. int로는 :SQL 스트립 텍스트 및 정수로 변환

activation successful of id 1010101

라인 위의 DB 필드에 정확한 데이터 구조이다.

내가 응용 프로그램의 코드에서이 작업을 수행하지 않으려는 아니, 사실 난 단지의 경우 당신은 내가 아니라 것

+0

? 당신이하고있는 일의 종류가 불분명합니다. –

+0

선택시 필드의 데이터에서 번호를 제거하고 싶습니다. DB 필드를 변경하고 싶지 않습니다. – Symbioxys

답변

1

: 샘플 데이터를 기반으로

SELECT SUBSTRING(column, PATINDEX('%[0-9]%', column), 999) 
FROM table 

이이 있음 문자열에 정수가 하나만 나타나고 끝 부분에 있습니다.

0
-- Test table, you will probably use some query 
DECLARE @testTable TABLE(comment VARCHAR(255)) 
INSERT INTO @testTable(comment) 
    VALUES ('activation successful of id 1010101') 

-- Use Charindex to find "id " then isolate the numeric part 
-- Finally check to make sure the number is numeric before converting 
SELECT CASE WHEN ISNUMERIC(JUSTNUMBER)=1 THEN CAST(JUSTNUMBER AS INTEGER) ELSE -1 END 
FROM ( 
     select right(comment, len(comment) - charindex('id ', comment)-2) as justnumber 
     from @testtable) TT 

을 ;-) 궁금하고, 그것을 만지고 싶지 않아 이 접근 방식은 더 많은 데이터 기반에 따라 더 효율적으로 설정된다는 점을 강조합니다. 그러나 하나의 변수에 대해서만 그렇게하는 것이 쉽습니다. 열 주석을 사용하는 대신 @chvComment과 같은 변수를 사용할 수 있습니다.

0

나는 순간에 그것을 테스트 할 수있는 수단을 가지고 있지만하지 않는이 트릭을 할해야

select convert(int, substring(fieldName, len('activation successful of id '), len(fieldName) - len('activation successful of id '))) from tableName 
0

댓글 문자열이 정확히 대체 할 수있는 경우와 같습니다.

select replace(comment_col, 'activation successful of id ', '') as id from .... 

거의 확실하지 않습니다. 인증 실패? 당신은 문

을 대체 중첩으로 끝낼 수 있습니다
select replace(replace(comment_col, 'activation not successful of id ', ''), 'activation successful of id ', '') as id from .... 

[그건 경우이 편집 화면에서 말할 수 없어 미안 완전히 유효한 SQL]

혼란스러워하기 시작

; 함수를 작성하고 그 안에 대체 명령문을 넣는 것을 고려해보십시오.

일회 일이라면 별 문제가되지 않습니다. 당신은 또한 정규식을 사용할 수 있지만 꽤 느립니다 (그리고 어쨌든 2 개의 문제가 있음을 의미합니다).

0

약간의 코드를 작성 하시겠습니까? 하나의 옵션은 CLR 사용자 정의 함수를 만든 다음 Regex를 사용합니다. 자세한 내용은 here을 참조하십시오. 이렇게하면 복잡한 문자열을 처리 할 수 ​​있습니다.

당신의 위의 줄은 항상 다음 필드의 끝에 전화 번호와 함께, '아이디 #######의 성공적인 활성화'로 포맷 된 경우 :

declare @myColumn varchar(100) 
set @myColumn = 'activation successful of id 1010102' 


SELECT 
    @myColumn as [OriginalColumn] 
, CONVERT(int, REVERSE(LEFT(REVERSE(@myColumn), CHARINDEX(' ', REVERSE(@myColumn))))) as [DesiredColumn] 

당신에게 줄 것이다 :

에만 ID 번호를 가지고 있고 필드를 int를 만들기 위해 DB의 필드를 변경하려면
OriginalColumn       DesiredColumn 
---------------------------------------- ------------- 
activation successful of id 1010102  1010102 

(1 row(s) affected) 
0
CAST(REVERSE(LEFT(REVERSE(@Test),CHARINDEX(' ',REVERSE(@Test))-1)) AS INTEGER) 
0
select cast(right(column_name,charindex(' ',reverse(column_name))) as int) 
관련 문제