복붙노트

[SQL] 는 SQL 쿼리 알려진 두 문자열 사이의 문자열을 선택합니다

SQL

는 SQL 쿼리 알려진 두 문자열 사이의 문자열을 선택합니다

나는이 알려진 문자열 (반환 값이 시작하고이 두 개의 문자열로 끝나야합니다) 사이의 값을 얻기 위해 SQL 쿼리가 필요합니다.

예.

"모든 나는 개는 아주 나쁜되어 즉시 관계없이 어떤 다른 사람 생각의 가혹한 처벌을 요구했다는 것을 알고 있었다."

이 경우에 알려진 문자열은 "즉시" "개"와입니다. 내 쿼리가 반환해야합니다 그래서 "개는 아주 나쁜되어 즉시 가혹한 처벌을 요구했다"

지금까지이 함께하지만 아무 소용이 왔어요 :

SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text), CHARINDEX('immediately', @Text))

@Text 메인 문자열이 포함되는 변수.

누군가가 내가 잘못 갈거야 어디에 도움 저를 기쁘게 할 수 있습니까?

해결법

  1. ==============================

    1.문제는 하위 문자열 인수의 두 번째 부분은 첫 번째 인덱스를 포함된다는 것이다. 당신은이 일을하기 위해 두 번째 인덱스에서 첫 번째 인덱스를 뺄 필요가있다.

    문제는 하위 문자열 인수의 두 번째 부분은 첫 번째 인덱스를 포함된다는 것이다. 당신은이 일을하기 위해 두 번째 인덱스에서 첫 번째 인덱스를 뺄 필요가있다.

    SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text)
    , CHARINDEX('immediately',@text) - CHARINDEX('the dog', @Text) + Len('immediately'))
    
  2. ==============================

    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. ==============================

    3.나는 에반 뜻이 무엇인지 생각 :

    나는 에반 뜻이 무엇인지 생각 :

    SELECT SUBSTRING(@Text, CHARINDEX(@First, @Text) + LEN(@First), 
                     CHARINDEX(@Second, @Text) - CHARINDEX(@First, @Text) - LEN(@First))
    
  4. ==============================

    4.당신의 문자열로 '['및 ']'이 시도하고 대체

    당신의 문자열로 '['및 ']'이 시도하고 대체

    SELECT SUBSTRING(@TEXT,CHARINDEX('[',@TEXT)+1,(CHARINDEX(']',@TEXT)-CHARINDEX('[',@TEXT))-1)
    
  5. ==============================

    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. ==============================

    6.

    SELECT 
    SUBSTRING( '123@yahoo.com',  charindex('@','123@yahoo.com',1) + 1, charindex('.','123@yahoo.com',1) - charindex('@','123@yahoo.com',1) - 1 )
    
  7. ==============================

    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. ==============================

    8.나는 당신이 SQL 서버 PATINDEX () 함수를해야 할 수도 있습니다 느낌이있다. 이것 좀 봐:

    나는 당신이 SQL 서버 PATINDEX () 함수를해야 할 수도 있습니다 느낌이있다. 이것 좀 봐:

    PATINDEX에 사용 () 함수

    그래서 어쩌면 :

    SELECT SUBSTRING(@TEXT, PATINDEX('%the dog%', @TEXT), PATINDEX('%immediately%',@TEXT))
    
  9. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    13.도움이 되었기를 바랍니다 : 변경의 경우, 변수를 선언 한 번만 먹으 렴을 할 필요가있다.

    도움이 되었기를 바랍니다 : 변경의 경우, 변수를 선언 한 번만 먹으 렴을 할 필요가있다.

    선언 @line의 VARCHAR (100)

    설정 @line ='Email_i-Julie@mail.com '

    SUBSTRING 선택 (@line (charIndex의 (가 '-'선 @) +1)를 CHARINDEX ( '@', 라인 @)를 -charindex ( '-'선 @) -1)

  14. from https://stackoverflow.com/questions/18362260/a-sql-query-to-select-a-string-between-two-known-strings by cc-by-sa and MIT license