2017-10-25 12 views
3

SQL-Server 2008 R2을 사용하고 있습니다.두 문자열 사이의 문자열 일부분 가져 오기

우선,이 상점 문자열은 아주 나쁜 습관이라는 것을 알고 싶습니다.하지만 SQL 개발자로서 제 3 자 소프트웨어 출력을 생성하고 이와 같이 데이터베이스에 삽입합니다.

Name: 'Document No. 996' 
Unique No: 'A 54 x. 488sCHU' 
No 2: 'RF123456789' 
String 'This is dynamic text' value 'test' wrong data 
Values 'ETC1 ETC2'. 

주 :이 1 개 값은 상기 구조 (1 열, 1 행)

위에서 보듯이다


을 설명

샘플 값은 같다 은 다음과 같습니다. 단어 Name이 추가 된 후 : 작은 따옴표로 묶은 다음 줄 바꿈 이후에 일부 문서 번호가 없습니다. 등등.


내가 그 문자열에서이 부분을 추출 할 필요가

(원하는 결과) 필요한 것 : String 'This is dynamic text'합니다.

이 부분은 항상 단어 String으로 시작합니다.이 부분은 공백이되고 작은 따옴표로 된 텍스트가됩니다.

두 글자 사이에서 보이는 것처럼 보입니다. 먼저 String '이고 두 번째 글자는 '입니다.

SUBSTRINGCHARINDEX을 사용해야하지만 어쨌든 나는 그것을 얻을 수 없습니다. 나는 무엇을 시도했다


난 그냥 성공하지 않고 시도했다가 샘플 데이터이며 :

DECLARE @c varchar(100) 
SET  @c = 'Name: ''Document No. 996'' 
Unique No: ''A 54 x. 488sCHU'' 
No 2: ''RF123456789'' 
String ''This is dynamic text'' value ''test'' wrong data 
Values ''ETC1 ETC2''.' 


SELECT SUBSTRING(STUFF(@c, 1, CHARINDEX('String ''',@c), ''), 0, CHARINDEX('''', STUFF(@c, 1, CHARINDEX('String ''',@c), ''))) 
여기
+0

@YogeshSharma 원하는 결과가 나는 부분을 need' 무엇 '이다. – Infinity

답변

1

당신은 그것을 사용할 수 있습니다

DECLARE @c varchar(1000) 
SET  @c = 'Name: ''Document No. 996'' 
Unique No: ''A 54 x. 488sCHU'' 
No 2: ''RF123456789'' 
String ''This is dynamic text'' value ''test'' wrong data 
Values ''ETC1 ETC2''.' 


SELECT SUBSTRING(@c, CHARINDEX('String ''',@c) , CHARINDEX('''', @c, CHARINDEX('String ''',@c)+8 ) - CHARINDEX('String ''',@c)+1) 

결과 :

String 'This is dynamic text' 
+0

고마워, 그게 나를 위해 일해! – Infinity

+0

당신을 진심으로 환영합니다. –

0
DECLARE @c varchar(255) --100 will truncate your string 
SET  @c = 'Name: ''Document No. 996'' 
Unique No: ''A 54 x. 488sCHU'' 
No 2: ''RF123456789'' 
String ''This is dynamic text'' value ''test'' wrong data 
Values ''ETC1 ETC2''.' 

은 두 부분으로 솔루션의 분할은 더 나은 이해를 위해. 첫 번째 부분은 String 키워드로 시작하고 원래 문자열의 끝까지가는 하위 문자열을 찾는 것입니다. 이것을 두 번 다시 사용하기 위해 @ c1을 저장합니다. 두 번째 부분은 다음의 '을 찾고 @ c1에서만 찾아서 모든 것을 바로 잘라냅니다.

DECLARE @c1 Varchar(255) 
SELECT @c1 = SUBSTRING(@c, CHARINDEX('String ''',@c) + 8, 255) 
--This is dynamic text' value 'test' wrong data Values 'ETC1 ETC2'. 

SELECT LEFT(@c1, CHARINDEX('''',@c1) - 1) 
--This is dynamic text 

모두 함께 넣어 - 단일 쿼리 :

SELECT LEFT(SUBSTRING(@c, CHARINDEX('String ''',@c) + 8, 255), CHARINDEX('''',SUBSTRING(@c, CHARINDEX('String ''',@c) + 8, 255)) - 1) 
0

물론 있지만,이 같은 뭔가를 찾고되지 않음 아래 :

DECLARE @DATA NVARCHAR(MAX); 

SET @DATA = 'Name: ''Document No. 996'' 
Unique No: ''A 54 x. 488sCHU'' 
No 2: ''RF123456789'' 
String ''This is dynamic text'' value ''test'' wrong data 
Values ''ETC1 ETC2''.'; 

SELECT SUBSTRING(SUBSTRING(@DATA, CHARINDEX('String', @DATA), CHARINDEX('Values', @DATA)-CHARINDEX('String', @DATA)), 1, CHARINDEX('''', SUBSTRING(SUBSTRING(@DATA, CHARINDEX('String', @DATA), CHARINDEX('Values', @DATA)-CHARINDEX('String', @DATA)), CHARINDEX('''', SUBSTRING(@DATA, CHARINDEX('String', @DATA), CHARINDEX('Values', @DATA)-CHARINDEX('String', @DATA)))+1, LEN(SUBSTRING(@DATA, CHARINDEX('String', @DATA), CHARINDEX('Values', @DATA)-CHARINDEX('String', @DATA)))))+CHARINDEX('''', SUBSTRING(@DATA, CHARINDEX('String', @DATA), CHARINDEX('Values', @DATA)-CHARINDEX('String', @DATA)))); 

결과 :

String 'This is dynamic text'