복붙노트

[SQL] 어떻게 특정 문자까지 오라클 SQL에서 문자열을 선택하려면?

SQL

어떻게 특정 문자까지 오라클 SQL에서 문자열을 선택하려면?

나는이 같은 결과를 가지고 테이블 열을 말한다 :

ABC_blahblahblah
DEFGH_moreblahblahblah
IJKLMNOP_moremoremoremore

나는 말했다 테이블에서이 열을 선택하는 쿼리를 작성 할 수 좋아하지만에만 밑줄 (_) 문자까지 부분 문자열 반환 것입니다. 예를 들면 :

ABC
DEFGH
IJKLMNOP

문자열 함수는 위치 기반 및 밑줄의 위치가 다르기 때문에 작업까지 될 것 같지 않습니다.

나는 TRIM 기능 (특히 RTRIM 기능)에 대해 생각 :

SELECT RTRIM('listofchars' FROM somecolumn) 
FROM sometable

그러나 나는 확실히 단지 특정 문자 목록 / 세트를 제거하는 것 같다 내가에만 밑줄 문자에 이르기까지의 문자 후 정말이야 이후 작업이를 얻을 것 어떻게 아니에요.

해결법

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

    1.(밑줄이없는 문자열) SUBSTR, INSTR 및 NVL의 조합을 사용하면 당신이 원하는 반환합니다 :

    (밑줄이없는 문자열) SUBSTR, INSTR 및 NVL의 조합을 사용하면 당신이 원하는 반환합니다 :

    SELECT NVL(SUBSTR('ABC_blah', 0, INSTR('ABC_blah', '_')-1), 'ABC_blah') AS output
      FROM DUAL
    
    output
    ------
    ABC
    
    SELECT NVL(SUBSTR(t.column, 0, INSTR(t.column, '_')-1), t.column) AS output
      FROM YOUR_TABLE t
    

    오라클 10g +를 사용하는 경우, 당신은 REGEXP_SUBSTR를 통해 정규 표현식을 사용할 수 있습니다.

  2. ==============================

    2.이것은 쉽게 REGEXP_SUBSTR를 사용하여 수행 할 수 있습니다.

    이것은 쉽게 REGEXP_SUBSTR를 사용하여 수행 할 수 있습니다.

    사용하시기 바랍니다

    REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1) 
    

    어디 STRING_EXAMPLE은 문자열입니다.

    시험:

    SELECT 
    REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1) 
    from dual
    

    그것은 당신의 문제를 해결합니다.

  3. ==============================

    3.당신은 (INSTR 사용) 첫 번째 밑줄의 위치를 ​​가져온 다음 (POS-1) SUBSTR을 사용하여 1 charecter에서 문자열의 일부를 얻을 필요가있다.

    당신은 (INSTR 사용) 첫 번째 밑줄의 위치를 ​​가져온 다음 (POS-1) SUBSTR을 사용하여 1 charecter에서 문자열의 일부를 얻을 필요가있다.

      1  select 'ABC_blahblahblah' test_string,
      2         instr('ABC_blahblahblah','_',1,1) position_underscore,
      3         substr('ABC_blahblahblah',1,instr('ABC_blahblahblah','_',1,1)-1) result
      4*   from dual
    SQL> /
    
    TEST_STRING      POSITION_UNDERSCORE RES
    ---------------- ------------------  ---
    ABC_blahblahblah                  4  ABC
    

    측량기 문서

    SUBSTR 문서

  4. ==============================

    4.

    SELECT REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1)  from dual
    

    user1717270에 의해 게시 된 정답이다

    당신이 INSTR를 사용하는 경우, 그것은 당신에게 그것을에서 "_"가 들어 가정 문자열의 위치를 ​​제공 할 것입니다. 그것이 무엇 아니라면? 그럼 대답은 당신이 문자열을 인쇄 할 때, 그것은 NULL을 출력 할 것이다, 따라서 0이됩니다. 예 : 당신이 "여기서 host.domain"에서 도메인을 제거하십시오. 어떤 경우에는 당신은 단지 짧은 이름, 즉 "호스트"가됩니다. 대부분의 경우 당신은 "호스트"를 인쇄하고 싶습니다. 그것은 아무것도 발견하지 않았기 때문에 글쎄, INSTR으로 당신에게 NULL을 줄 것이다, 즉, 당신이 모든 경우에 올바른 답을 얻을 것이다 REGEXP_SUBSTR으로 0으로 0에서 인쇄 할 것이다 "."

    SELECT REGEXP_SUBSTR('HOST.DOMAIN','[^.]+',1,1)  from dual;
    

    주최자

    SELECT REGEXP_SUBSTR('HOST','[^.]+',1,1)  from dual;
    

    주최자

  5. ==============================

    5.또 다른 가능성은 REGEXP_SUBSTR를 사용하는 것입니다.

    또 다른 가능성은 REGEXP_SUBSTR를 사용하는 것입니다.

  6. ==============================

    6.열의 모든 문자열에 밑줄이없는 경우이 기억 (... 그렇지 null 값이 출력 될 경우) :

    열의 모든 문자열에 밑줄이없는 경우이 기억 (... 그렇지 null 값이 출력 될 경우) :

    SELECT COALESCE
    (SUBSTR("STRING_COLUMN" , 0, INSTR("STRING_COLUMN", '_')-1), 
    "STRING_COLUMN") 
    AS OUTPUT FROM DUAL
    
  7. ==============================

    7.큰 문자열에서 하위 문자열을 찾으려면 :

    큰 문자열에서 하위 문자열을 찾으려면 :

    string_value:=('This is String,Please search string 'Ple');
    

    그리고 우리가 할 수있는 STRING_VALUE에서 문자열 'PLE'을 찾을 수 있습니다 :

    select substr(string_value,instr(string_value,'Ple'),length('Ple')) from dual;
    

    당신은 결과를 찾을 수 : PLE

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

    8.경우 문자열의 위치는 우리가 예상 출력을 얻을 수있는 선택의 문 아래에서 다음 고정되지 않은 경우.

    경우 문자열의 위치는 우리가 예상 출력을 얻을 수있는 선택의 문 아래에서 다음 고정되지 않은 경우.

    테이블 구조 ID VARCHAR2 (100 BYTE) CLIENT VARCHAR2 (4000 BYTE)

    데이터- ID의 CLIENT 1001 { "clientid는": "사기꾼 - BJP", "CLIENTNAME": "ABC", "에서는 공급자": "SBS"} 1,002  { "IdType": "AccountNo", "ID": "XXXXXXXX3521", "ToPricingId": "XXXXXXXX3521", "클라이언트 ID": "테스트 - 커스트", "CLIENTNAME": "MFX"}

    요구 사항은 - 클라이언트 열에서 "클라이언트 ID"문자열을 검색하고 해당 값을 반환합니다. "클라이언트 ID"에서처럼 "사기꾼 - BJP"-> 사기꾼 BJP (예상 출력)

    CLIENT, SUBSTR (SUBSTR (CLIENT 측량기 (CLIENT을 선택 ""클라이언트 ID "" ') + 길이 ( ""클라이언트 ID ""')), 1- 측량기 (SUBSTR (CLIENT 측량기 (CLIENT ' "클라이언트 ID" " ') + 길이 (" "클라이언트 ID" "')), '"', 1) -1)로부터 TEST_SC cut_str;

    클라이언트 cut_str -------------------------------------------------- --------- ---------- { "clientid는": "사기꾼 - BJP", "CLIENTNAME": "ABC", "에서는 공급자": "SBS"} 사기꾼 BJP { "IdType": "AccountNo", "ID": "XXXXXXXX3521", "ToPricingId": "XXXXXXXX3521", "클라이언트 ID": "테스트 - 커스트", "CLIENTNAME": "MFX"} 테스트 - 커스트

  9. from https://stackoverflow.com/questions/4389571/how-to-select-a-substring-in-oracle-sql-up-to-a-specific-character by cc-by-sa and MIT license