[SQL] 는 SQL 쿼리 알려진 두 문자열 사이의 문자열을 선택합니다
SQL는 SQL 쿼리 알려진 두 문자열 사이의 문자열을 선택합니다
나는이 알려진 문자열 (반환 값이 시작하고이 두 개의 문자열로 끝나야합니다) 사이의 값을 얻기 위해 SQL 쿼리가 필요합니다.
예.
"모든 나는 개는 아주 나쁜되어 즉시 관계없이 어떤 다른 사람 생각의 가혹한 처벌을 요구했다는 것을 알고 있었다."
이 경우에 알려진 문자열은 "즉시" "개"와입니다. 내 쿼리가 반환해야합니다 그래서 "개는 아주 나쁜되어 즉시 가혹한 처벌을 요구했다"
지금까지이 함께하지만 아무 소용이 왔어요 :
SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text), CHARINDEX('immediately', @Text))
@Text 메인 문자열이 포함되는 변수.
누군가가 내가 잘못 갈거야 어디에 도움 저를 기쁘게 할 수 있습니까?
해결법
-
==============================
1.문제는 하위 문자열 인수의 두 번째 부분은 첫 번째 인덱스를 포함된다는 것이다. 당신은이 일을하기 위해 두 번째 인덱스에서 첫 번째 인덱스를 뺄 필요가있다.
문제는 하위 문자열 인수의 두 번째 부분은 첫 번째 인덱스를 포함된다는 것이다. 당신은이 일을하기 위해 두 번째 인덱스에서 첫 번째 인덱스를 뺄 필요가있다.
SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text) , CHARINDEX('immediately',@text) - CHARINDEX('the dog', @Text) + Len('immediately'))
-
==============================
2.예는 이것이다 : 당신은 문자열과 문자 $를
예는 이것이다 : 당신은 문자열과 문자 $를
문자열 :
aaaaa$bbbbb$ccccc
암호:
SELECT SUBSTRING('aaaaa$bbbbb$ccccc',CHARINDEX('$','aaaaa$bbbbb$ccccc')+1, CHARINDEX('$','aaaaa$bbbbb$ccccc',CHARINDEX('$','aaaaa$bbbbb$ccccc')+1) -CHARINDEX('$','aaaaa$bbbbb$ccccc')-1) as My_String
산출:
bbbbb
-
==============================
3.나는 에반 뜻이 무엇인지 생각 :
나는 에반 뜻이 무엇인지 생각 :
SELECT SUBSTRING(@Text, CHARINDEX(@First, @Text) + LEN(@First), CHARINDEX(@Second, @Text) - CHARINDEX(@First, @Text) - LEN(@First))
-
==============================
4.당신의 문자열로 '['및 ']'이 시도하고 대체
당신의 문자열로 '['및 ']'이 시도하고 대체
SELECT SUBSTRING(@TEXT,CHARINDEX('[',@TEXT)+1,(CHARINDEX(']',@TEXT)-CHARINDEX('[',@TEXT))-1)
-
==============================
5.당신은 문자열의 길이를 조정해야합니다. 당신은 '종료 문자열'의 끝을 가리키는했다.
당신은 문자열의 길이를 조정해야합니다. 당신은 '종료 문자열'의 끝을 가리키는했다.
이 같은 시도 :
declare @TEXT varchar(200) declare @ST varchar(200) declare @EN varchar(200) set @ST = 'the dog' set @EN = 'immediately' set @TEXT = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.' SELECT SUBSTRING(@Text, CHARINDEX(@ST, @Text), (CHARINDEX(@EN, @Text)+LEN(@EN))-CHARINDEX(@ST, @Text))
물론, 당신은 그것을 조금 조정해야 할 수도 있습니다.
-
==============================
6.
SELECT SUBSTRING( '123@yahoo.com', charindex('@','123@yahoo.com',1) + 1, charindex('.','123@yahoo.com',1) - charindex('@','123@yahoo.com',1) - 1 )
-
==============================
7.ID = 3598308 & 사용자 = AD \ 사용자 및 매개 변수 = 1 & 목록 = 아니오이 형식에 필요한 : 나는이처럼 보였다 로그 'csUriQuery 필드를 IIS에 저장된 파라미터 세트를 구문 분석하는 유사한 필요가 있었다.
ID = 3598308 & 사용자 = AD \ 사용자 및 매개 변수 = 1 & 목록 = 아니오이 형식에 필요한 : 나는이처럼 보였다 로그 'csUriQuery 필드를 IIS에 저장된 파라미터 세트를 구문 분석하는 유사한 필요가 있었다.
나는 다음과 같은 가정으로, 사이의 문자열을 달성하기 위해 사용자 정의 함수를 만들어 결국 :
여기 코드는 :
CREATE FUNCTION dbo.str_between(@col varchar(max), @start varchar(50), @end varchar(50)) RETURNS varchar(max) WITH EXECUTE AS CALLER AS BEGIN RETURN substring(@col, charindex(@start, @col) + len(@start), isnull(nullif(charindex(@end, stuff(@col, 1, charindex(@start, @col)-1, '')),0), len(stuff(@col, 1, charindex(@start, @col)-1, ''))+1) - len(@start)-1); END; GO
다음과 같이 위의 질문의 경우, 사용법은 다음과 같습니다
DECLARE @a VARCHAR(MAX) = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.' SELECT dbo.str_between(@a, 'the dog', 'immediately') -- Yields' had been very bad and required harsh punishment '
-
==============================
8.나는 당신이 SQL 서버 PATINDEX () 함수를해야 할 수도 있습니다 느낌이있다. 이것 좀 봐:
나는 당신이 SQL 서버 PATINDEX () 함수를해야 할 수도 있습니다 느낌이있다. 이것 좀 봐:
PATINDEX에 사용 () 함수
그래서 어쩌면 :
SELECT SUBSTRING(@TEXT, PATINDEX('%the dog%', @TEXT), PATINDEX('%immediately%',@TEXT))
-
==============================
9.
DECLARE @Text VARCHAR(MAX), @First VARCHAR(MAX), @Second VARCHAR(MAX) SET @Text = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.' SET @First = 'the dog' SET @Second = 'immediately' SELECT SUBSTRING(@Text, CHARINDEX(@First, @Text), CHARINDEX(@Second, @Text) - CHARINDEX(@First, @Text) + LEN(@Second))
-
==============================
10.당신은 '즉시 처벌'의 시작 위치를 받고 있지만 전달하는 당신의 문자열의 길이 매개 변수로.
당신은 '즉시 처벌'의 시작 위치를 받고 있지만 전달하는 당신의 문자열의 길이 매개 변수로.
당신은 '즉시 처벌'의 charIndex의에서 '개'의 시작 위치를 빼지해야하고, 다음 세 번째 매개 변수에 '즉시 처벌'문자열의 길이를 추가합니다. 이것은 당신에게 올바른 텍스트를 줄 것이다.
여기에 몇 가지 거친 과정을 설명하기 해키 코드는 다음과 같습니다
DECLARE @text VARCHAR(MAX) SET @text = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.' DECLARE @start INT SELECT @start = CHARINDEX('the dog',@text) DECLARE @endLen INT SELECT @endLen = LEN('immediately') DECLARE @end INT SELECT @end = CHARINDEX('immediately',@text) SET @end = @end - @start + @endLen SELECT @end SELECT SUBSTRING(@text,@start,@end)
결과 : 개는 아주 나쁜되어 즉시 가혹한 처벌을 요구했다
-
==============================
11.
<pre>
VARCHAR (MAX) @text DECLARE
SET @text = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.' declare @pretext as nvarchar(100) = 'the dog' declare @posttext as nvarchar(100) = 'immediately' SELECT CASE When CHARINDEX(@posttext, @Text) - (CHARINDEX(@pretext, @Text) + len(@pretext)) < 0 THEN '' Else SUBSTRING(@Text, CHARINDEX(@pretext, @Text) + len(@pretext) , CHARINDEX(@posttext, @Text) - (CHARINDEX(@pretext, @Text) + len(@pretext)) ) END as betweentext
-
==============================
12.
SELECT SUBSTRING('aaaaa$bbbbb$ccccc',instr('aaaaa$bbbbb$ccccc','$',1,1)+1, instr('aaaaa$bbbbb$ccccc','$',1,2)-1) -instr('aaaaa$bbbbb$ccccc','$',1,1)) as My_String
-
==============================
13.도움이 되었기를 바랍니다 : 변경의 경우, 변수를 선언 한 번만 먹으 렴을 할 필요가있다.
도움이 되었기를 바랍니다 : 변경의 경우, 변수를 선언 한 번만 먹으 렴을 할 필요가있다.
선언 @line의 VARCHAR (100)
설정 @line ='Email_i-Julie@mail.com '
SUBSTRING 선택 (@line (charIndex의 (가 '-'선 @) +1)를 CHARINDEX ( '@', 라인 @)를 -charindex ( '-'선 @) -1)
from https://stackoverflow.com/questions/18362260/a-sql-query-to-select-a-string-between-two-known-strings by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SSIS 패키지는 임시 테이블의 메타 데이터를 가져 싶지 않다 (0) | 2020.05.01 |
---|---|
[SQL] PIP "심각한 오류 C1083을 mysqlclient 반환을 설치하지 : 파일을 열 수 없습니다 : '에서 mysql.h를': 그런 파일이나 디렉토리 (0) | 2020.05.01 |
[SQL] 기준 개체로 그룹 최대 절전 모드 (0) | 2020.05.01 |
[SQL] 문자열이 고유 식별자 인 경우 확인하는 방법? (0) | 2020.05.01 |
[SQL] SQL은 - 어떻게 최대 값을 가진 열을 갖는 행을 선택합니다 (0) | 2020.05.01 |