복붙노트

[SQL] 후 SQL Server의 특정 문자 앞에 모든 것을 얻을

SQL

후 SQL Server의 특정 문자 앞에 모든 것을 얻을

내 데이터베이스에서 다음 항목을 가지고 :

images/test.jpg

내가 얻을 수 있도록 항목을 다듬을 : 테스트를

그러니까 기본적으로, 나는 후 /과 전에 모든 것을 할 수 있습니다.

어떻게 그것을 해결할 수 있습니까?

해결법

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

    1.SUBSTRING 및 CHARINDEX : 당신은 SQL을 사용하여 테이블의 출력을 얻고 싶은 경우에, 당신을 도울 것입니다 다음과 같은 기능을 살펴. 당신은 당신의 항목을 손질하는 사람들을 사용할 수 있습니다.

    SUBSTRING 및 CHARINDEX : 당신은 SQL을 사용하여 테이블의 출력을 얻고 싶은 경우에, 당신을 도울 것입니다 다음과 같은 기능을 살펴. 당신은 당신의 항목을 손질하는 사람들을 사용할 수 있습니다.

    COL은 이미지 디렉토리가 포함 된 열의 이름입니다 가능한 쿼리 (다음과 같이 표시됩니다

    SELECT SUBSTRING(col, LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) + 1, 
        LEN(col) - LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) - LEN(SUBSTRING(
        col, CHARINDEX ('.', col), LEN(col))));
    

    못생긴 짐승의 비트. 또한 'DIR / 이름 .ext'의 표준 형식에 따라 달라집니다.

    편집하다: (프라 빈에서 영감)이 사람은 다른 길이의 확장과 더 일반적인 및 거래입니다 :

    SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('/', col))) + 1, LEN(col) - LEN(LEFT(col, 
        CHARINDEX ('/', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX ('.', col))) - 1);
    
  2. ==============================

    2.다음 함수를 사용

    다음 함수를 사용

    left(@test, charindex('/', @test) - 1)
    
  3. ==============================

    3.전에

    전에

    SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('/',ParentBGBU,0)) FROM dbo.tblHCMMaster;
    

    SELECT SUBSTRING(ParentBGBU,CHARINDEX('-',ParentBGBU)+1,LEN(ParentBGBU)) FROM dbo.tblHCMMaster
    
  4. ==============================

    4.

     declare @T table
      (
      Col varchar(20)
      )
    
    
    
      insert into @T 
      Select 'images/test1.jpg'
      union all
      Select 'images/test2.png'
      union all
      Select 'images/test3.jpg'
      union all
      Select 'images/test4.jpeg'
      union all
      Select 'images/test5.jpeg'
    
     Select substring( LEFT(Col,charindex('.',Col)-1),charindex('/',Col)+1,len(LEFT(Col,charindex('.',Col)-1))-1 )
    from @T
    
  5. ==============================

    5.---- 문자를 선택하기 전에 / 포함 /

    ---- 문자를 선택하기 전에 / 포함 /

    select SUBSTRING ('abcde/wxyz',0,CHARINDEX('/','abcde/wxyz')+1)
    

    --select 문자 후 / 포함 /

    select SUBSTRING('abcde/wxyz',CHARINDEX('/','abcde/wxyz'),LEN('abcde/wxyz')) 
    
  6. ==============================

    6.나는 훨씬 더 일반적이다 방법을 만들었습니다 :

    나는 훨씬 더 일반적이다 방법을 만들었습니다 :

    그래서 :

    DECLARE @a NVARCHAR(MAX)='images/test.jpg';
    
    
     --Touch here
    DECLARE @keysValueToSearch NVARCHAR(4000) = '/'
    DECLARE @untilThisCharAppears NVARCHAR(4000) = '.'
    DECLARE @keysValueToSearchPattern NVARCHAR(4000) = '%' + @keysValueToSearch + '%'
    
    
     --Nothing to touch here     
    SELECT SUBSTRING(
               @a,
               PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch),
               CHARINDEX(
                   @untilThisCharAppears,
                   @a,
                   PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch)
               ) -(PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch))
           )
    
  7. ==============================

    7.난 그냥 내 보고서 중 하나에서 이런 짓을 그리고 그것은 매우 간단했다.

    난 그냥 내 보고서 중 하나에서 이런 짓을 그리고 그것은 매우 간단했다.

    이 시도:

    =MID(Fields!.Value,8,4)
    

    참고 : 나는 잡으려고 값이 일정하지 있는지를 무엇을 얻으려고 노력하는 것은 일정한뿐만 아니라입니다 때문에이 나를 ​​위해 일했다.

  8. ==============================

    8.나는이 잠시왔다 알고 ..하지만 여기에 생각이다

    나는이 잠시왔다 알고 ..하지만 여기에 생각이다

    declare @test varchar(25) = 'images/test.jpg'
    
    select
     @test as column_name
     , parsename(replace(@test,'/','.'),1) as jpg
     ,parsename(replace(@test,'/','.'),2) as test
      ,parsename(replace(@test,'/','.'),3) as images
    
  9. ==============================

    9.나는 Royi Namir의 답변이 유용하다고하지만 함수로 만드는 데에 확대했다. 나는 나에게 감각을 만들 었는지에 변수 이름을 변경하지만 원하는 경우 당신은 충분히 쉽게 다시 번역 할 수 있습니다.

    나는 Royi Namir의 답변이 유용하다고하지만 함수로 만드는 데에 확대했다. 나는 나에게 감각을 만들 었는지에 변수 이름을 변경하지만 원하는 경우 당신은 충분히 쉽게 다시 번역 할 수 있습니다.

    또한, Royi의 대답의 코드는 이미 문자의 존재가 (이 문자열의 처음부터 시작) 존재하지 않는에서 검색 한 사건을 처리하지만, 나는 또한에 검색되고있는 캐릭터가 존재하지 않는 경우를 처리하고 싶었다.

    이 경우 그것은 문자에서 검색에서 시작하여 문자열의 끝에 문자의 나머지 부분을 반환하여 유사한 방식으로 작동합니다.

    CREATE FUNCTION [dbo].[getValueBetweenTwoStrings](@inputString 
    NVARCHAR(4000), @stringToSearchFrom NVARCHAR(4000), @stringToSearchTo 
    NVARCHAR(4000))
    RETURNS NVARCHAR(4000)
    AS
    BEGIN      
    DECLARE @retVal NVARCHAR(4000)
    DECLARE @stringToSearchFromSearchPattern NVARCHAR(4000) = '%' + 
    @stringToSearchFrom + '%'
    
    SELECT @retVal = SUBSTRING (
           @inputString,
           PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom),
           (CASE
                CHARINDEX(
                    @stringToSearchTo,
                    @inputString,
                    PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom))
            WHEN
                0
            THEN
                LEN(@inputString) + 1
            ELSE
                CHARINDEX(
                    @stringToSearchTo,
                    @inputString,
                    PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom))
            END) - (PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom))
       )
    RETURN @retVal
    END
    

    용법:

    SELECT dbo.getValueBetweenTwoStrings('images/test.jpg','/','.') AS MyResult
    
  10. ==============================

    10.이 시도 할 수 있습니다 :

    이 시도 할 수 있습니다 :

    Declare @test varchar(100)='images/test.jpg'
    Select REPLACE(RIGHT(@test,charindex('/',reverse(@test))-1),'.jpg','')
    
  11. ==============================

    11.쿼리 아래 당신이 이전에 데이터를 제공합니다 '-' 전직 W12345A-4S

    쿼리 아래 당신이 이전에 데이터를 제공합니다 '-' 전직 W12345A-4S

    SELECT SUBSTRING(Column_Name,0, CHARINDEX('-',Column_Name))  as 'new_name'
    from [abc].
    

    출력 - W12345A

  12. ==============================

    12.Josien의 작품에서 영감을, 나는 단순화에 대해 궁금해했다.

    Josien의 작품에서 영감을, 나는 단순화에 대해 궁금해했다.

    이 또한 일이겠습니까? 훨씬 짧은 :

    SELECT SUBSTRING(col, CHARINDEX ('/', col) + 1, CHARINDEX ('.', col) - CHARINDEX ('/', col) - 1);
    

    (I는 그 자체로 문제가 내 회사의 SQL 서버에 있기 때문에 바로 문제의 지금 테스트 할 수 없습니다)

  13. ==============================

    13.

    select 
    LEFT((RIGHT(a.name,((CHARINDEX('/', name))+1))),((CHARINDEX('.', (RIGHT(a.name, 
                         ((CHARINDEX('/', name))+1)))))-1)) splitstring,
    a.name      
    from 
       (select 'images/test.jpg' as name)a
    
  14. ==============================

    14.좀 잘못된 길이 오류를 얻었다. 나는이 기능을 만든 그래서,이 길이 문제를주지해야한다. 당신이 검색 텍스트를 찾을 수없는 경우 또한 그것은 NULL을 반환합니다.

    좀 잘못된 길이 오류를 얻었다. 나는이 기능을 만든 그래서,이 길이 문제를주지해야한다. 당신이 검색 텍스트를 찾을 수없는 경우 또한 그것은 NULL을 반환합니다.

    CREATE FUNCTION [FN].[SearchTextGetBetweenStartAndStop](@string varchar(max),@SearchStringToStart varchar(max),@SearchStringToStop varchar(max))
    
    RETURNS varchar(max)
    
    BEGIN
    
    
        SET @string =    CASE 
                             WHEN CHARINDEX(@SearchStringToStart,@string) = 0
                               OR CHARINDEX(@SearchStringToStop,RIGHT(@string,LEN(@string) - CHARINDEX(@SearchStringToStart,@string) + 1 - LEN(@SearchStringToStart))) = 0
                             THEN NULL
                             ELSE SUBSTRING(@string
                                           ,CHARINDEX(@SearchStringToStart,@string) + LEN(@SearchStringToStart) + 1
                                           ,(CHARINDEX(@SearchStringToStop,RIGHT(@string,LEN(@string) - CHARINDEX(@SearchStringToStart,@string) + 1 - LEN(@SearchStringToStart)))-2)     
                                           )
                         END
    
    
        RETURN @string
    
    END
    
  15. from https://stackoverflow.com/questions/11010453/get-everything-after-and-before-certain-character-in-sql-server by cc-by-sa and MIT license