Oracle SQL에서 특정 문자까지 서브스트링을 선택하는 방법
다음과 같은 결과가 있는 테이블 열이 있다고 가정합니다.
ABC_blahblahblah
DEFGH_moreblahblahblah
IJKLMNOP_moremoremoremore
상기 표에서 이 열을 선택하는 쿼리를 작성할 수 있으면 좋겠지만, 언더스코어(_) 문자까지의 부분 문자열만 반환합니다.예를 들어 다음과 같습니다.
ABC
DEFGH
IJKLMNOP
SUBSTRING 함수는 위치 기반이고 언더스코어의 위치가 다르기 때문에 작업에 적합하지 않은 것 같습니다.
TRIM 기능(RTRIM 기능)에 대해 생각해 보았습니다.
SELECT RTRIM('listofchars' FROM somecolumn)
FROM sometable
그러나 특정 목록/문자 집합만 삭제되고 언더스코어 문자로 이어지는 문자만 삭제되기 때문에 어떻게 작동해야 할지 잘 모르겠습니다.
(언더스코어가 없는 문자열의 경우) EBRD, 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
레퍼런스:
부록
Oracle 10g+를 사용하는 경우 REGEXP_SUBstr을 통해 regex를 사용할 수 있습니다.
이것은 REGEXP_SUBstr을 사용하여 쉽게 실행할 수 있습니다.
사용하세요
REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1)
STRING_EXAMPLE은 문자열입니다.
시험:
SELECT
REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1)
from dual
그게 너의 문제를 해결해 줄 거야.
첫 번째 언더스코어 위치(INSTR 사용)를 취득한 후 기판을 사용하여 첫 번째 샤렉터에서 (pos-1)까지의 문자열 부분을 취득해야 합니다.
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
SELECT REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1) from dual
사용자 1717270에 의해 게시된 바와 같이 정답입니다.
사용하시는 경우INSTR
"_" 가 포함되어 있다고 가정하는 문자열의 위치가 나타납니다.그렇지 않으면요?정답은 0이 될 것입니다.따라서 스트링을 인쇄하고 싶을 때 스트링이 인쇄됩니다.NULL
. 예:"host.domain"에서 도메인을 삭제하는 경우.경우에 따라서는 "host"와 같은 짧은 이름만 갖게 됩니다.대부분의 경우 "host"를 인쇄합니다.음, 그럼.INSTR
그것은 너에게 을 줄 것이다.NULL
「」를 찾을 수 없기 때문에, 0부터 0까지 인쇄됩니다.와 함께REGEXP_SUBSTR
모든 경우에 정답을 얻을 수 있습니다.
SELECT REGEXP_SUBSTR('HOST.DOMAIN','[^.]+',1,1) from dual;
주인
그리고.
SELECT REGEXP_SUBSTR('HOST','[^.]+',1,1) from dual;
주인
다른 방법으로는 REGEXP_SUBstr을 사용할 수 있습니다.
String 위치가 고정되지 않은 경우 Select 스테이트먼트 아래까지 예상 출력을 얻을 수 있습니다.
Table Structure
ID VARCHAR2(100 BYTE)
CLIENT VARCHAR2(4000 BYTE)
데이터 -
ID CLIENT
1001 {"clientId":"con-bjp","clientName":"ABC","providerId":"SBS"}
1002
--
{"IdType":"AccountNo","Id":"XXXXXXXX3521","ToPricingId":"XXXXXXXX3521","clientId":"Test-Cust","clientName":"MFX"}
요건 - 검색ClientId
을 가두다CLIENT
컬럼을 지정하고 해당 값을 반환합니다.- 아니, 아니에요."clientId":"con-bjp" --> con-bjp(Expected output)
select CLIENT,substr(substr(CLIENT,instr(CLIENT,'"clientId":"')+length('"clientId":"')),1,instr(substr(CLIENT,instr(CLIENT,'"clientId":"')+length('"clientId":"')),'"',1 )-1) cut_str from TEST_SC;
--
CLIENT cut_str
----------------------------------------------------------- ----------
{"clientId":"con-bjp","clientName":"ABC","providerId":"SBS"} con-bjp
{"IdType":"AccountNo","Id":"XXXXXXXX3521","ToPricingId":"XXXXXXXX3521","clientId":"Test-Cust","clientName":"MFX"} Test-Cust
컬럼의 모든 문자열에 밑줄이 없는 경우(...또는 null 값이 출력이 되는 경우)에 주의해 주십시오.
SELECT COALESCE
(SUBSTR("STRING_COLUMN" , 0, INSTR("STRING_COLUMN", '_')-1),
"STRING_COLUMN")
AS OUTPUT FROM DUAL
큰 문자열에서 서브스트링을 찾으려면 다음 절차를 수행합니다.
string_value:=('This is String,Please search string 'Ple');
Then to find the string 그럼 문자열을 찾으려면'Ple'
부에서String_value
우리가 할 수 있습니다.다음과 같은 작업을 수행할 수 있습니다.
select substr(string_value,instr(string_value,'Ple'),length('Ple')) from dual;
You will find result: 결과는 다음과 같습니다.Ple
언급URL : https://stackoverflow.com/questions/4389571/how-to-select-a-substring-in-oracle-sql-up-to-a-specific-character
'source' 카테고리의 다른 글
인터페이스의 TypeScript 옵션 함수 (0) | 2023.02.22 |
---|---|
리액트 앱에서 npm start를 실행할 때 babel-jest 의존성 문제 (0) | 2023.02.22 |
스프링 부트 검증 주석 @Valid 및 @NotBlank가 작동하지 않음 (0) | 2023.02.22 |
Angular에 몇 가지 작은 유틸리티 기능을 추가하는 방법JS 어플리케이션? (0) | 2023.02.22 |
jQuery AJAX 폼이 두 번 제출됨 (0) | 2023.02.22 |