내 데이터베이스 (SQL 2005)에서 나는 주석이 들어있는 필드가 있지만 주석에 나는 ID가 있으며 나는 단지 ID를 제거하고 가능한 경우 변환하려고합니다. int로는 :SQL 스트립 텍스트 및 정수로 변환
activation successful of id 1010101
라인 위의 DB 필드에 정확한 데이터 구조이다.
내가 응용 프로그램의 코드에서이 작업을 수행하지 않으려는 아니, 사실 난 단지의 경우 당신은 내가 아니라 것
내 데이터베이스 (SQL 2005)에서 나는 주석이 들어있는 필드가 있지만 주석에 나는 ID가 있으며 나는 단지 ID를 제거하고 가능한 경우 변환하려고합니다. int로는 :SQL 스트립 텍스트 및 정수로 변환
activation successful of id 1010101
라인 위의 DB 필드에 정확한 데이터 구조이다.
내가 응용 프로그램의 코드에서이 작업을 수행하지 않으려는 아니, 사실 난 단지의 경우 당신은 내가 아니라 것
: 샘플 데이터를 기반으로
이SELECT SUBSTRING(column, PATINDEX('%[0-9]%', column), 999)
FROM table
이이 있음 문자열에 정수가 하나만 나타나고 끝 부분에 있습니다.
-- 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
과 같은 변수를 사용할 수 있습니다.
나는 순간에 그것을 테스트 할 수있는 수단을 가지고 있지만하지 않는이 트릭을 할해야
select convert(int, substring(fieldName, len('activation successful of id '), len(fieldName) - len('activation successful of id '))) from tableName
댓글 문자열이 정확히 대체 할 수있는 경우와 같습니다.
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 개의 문제가 있음을 의미합니다).
약간의 코드를 작성 하시겠습니까? 하나의 옵션은 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)
CAST(REVERSE(LEFT(REVERSE(@Test),CHARINDEX(' ',REVERSE(@Test))-1)) AS INTEGER)
select cast(right(column_name,charindex(' ',reverse(column_name))) as int)
? 당신이하고있는 일의 종류가 불분명합니다. –
선택시 필드의 데이터에서 번호를 제거하고 싶습니다. DB 필드를 변경하고 싶지 않습니다. – Symbioxys