[SQL] 어떻게 특정 문자까지 오라클 SQL에서 문자열을 선택하려면?
SQL어떻게 특정 문자까지 오라클 SQL에서 문자열을 선택하려면?
나는이 같은 결과를 가지고 테이블 열을 말한다 :
ABC_blahblahblah
DEFGH_moreblahblahblah
IJKLMNOP_moremoremoremore
나는 말했다 테이블에서이 열을 선택하는 쿼리를 작성 할 수 좋아하지만에만 밑줄 (_) 문자까지 부분 문자열 반환 것입니다. 예를 들면 :
ABC
DEFGH
IJKLMNOP
문자열 함수는 위치 기반 및 밑줄의 위치가 다르기 때문에 작업까지 될 것 같지 않습니다.
나는 TRIM 기능 (특히 RTRIM 기능)에 대해 생각 :
SELECT RTRIM('listofchars' FROM somecolumn)
FROM sometable
그러나 나는 확실히 단지 특정 문자 목록 / 세트를 제거하는 것 같다 내가에만 밑줄 문자에 이르기까지의 문자 후 정말이야 이후 작업이를 얻을 것 어떻게 아니에요.
해결법
-
==============================
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.이것은 쉽게 REGEXP_SUBSTR를 사용하여 수행 할 수 있습니다.
이것은 쉽게 REGEXP_SUBSTR를 사용하여 수행 할 수 있습니다.
사용하시기 바랍니다
REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1)
어디 STRING_EXAMPLE은 문자열입니다.
시험:
SELECT REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1) from dual
그것은 당신의 문제를 해결합니다.
-
==============================
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.
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.또 다른 가능성은 REGEXP_SUBSTR를 사용하는 것입니다.
또 다른 가능성은 REGEXP_SUBSTR를 사용하는 것입니다.
-
==============================
6.열의 모든 문자열에 밑줄이없는 경우이 기억 (... 그렇지 null 값이 출력 될 경우) :
열의 모든 문자열에 밑줄이없는 경우이 기억 (... 그렇지 null 값이 출력 될 경우) :
SELECT COALESCE (SUBSTR("STRING_COLUMN" , 0, INSTR("STRING_COLUMN", '_')-1), "STRING_COLUMN") AS OUTPUT FROM DUAL
-
==============================
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.경우 문자열의 위치는 우리가 예상 출력을 얻을 수있는 선택의 문 아래에서 다음 고정되지 않은 경우.
경우 문자열의 위치는 우리가 예상 출력을 얻을 수있는 선택의 문 아래에서 다음 고정되지 않은 경우.
테이블 구조 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"} 테스트 - 커스트
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
'SQL' 카테고리의 다른 글
[SQL] 이름이 특정 문자열로 시작하는 모든 테이블을 삭제 (0) | 2020.04.29 |
---|---|
[SQL] 어떻게 MySQL은 DATETIME에서 일부 날짜와 시간에 (0) | 2020.04.29 |
[SQL] 또 다른 하나 개의 테이블 일치 조건에서 선택? (0) | 2020.04.29 |
[SQL] 고유 식별자없이 중복 행을 삭제하는 방법 (0) | 2020.04.29 |
[SQL] SQL 서버 관리 스튜디오를 사용하여 데이터베이스로 BLOB를 삽입하는 방법 (0) | 2020.04.29 |