programing

Oracle SQL 쿼리에서 문자열 포함 함수 사용

bestprogram 2023. 3. 13. 21:08

Oracle SQL 쿼리에서 문자열 포함 함수 사용

Oracle 데이터베이스를 사용 중인데 varchar 유형 열의 값에 문자가 포함된 문자열이 있는 행을 찾는 방법을 알고 싶습니다.

다음과 같은 방법을 시도하고 있지만(이것은 내가 원하는 간단한 예) 작동하지 않습니다.

select p.name
from   person p
where  p.name contains the character 'A';

또한 다음과 같은 기능을 사용할 수 있는지 알고 싶습니다.chr(1234)여기서 1234는 ASCII 코드입니다.'A'예를 들어 쿼리의 문자를 검색합니다.이 경우 사용자의 이름에 ASCII 코드로 8211 문자가 포함된 데이터베이스 값을 검색합니다.

쿼리 사용 시select CHR(8211) from dual;나는 내가 원하는 특별한 캐릭터를 얻는다.

예:

select p.name
from   person p
where  p.name contains the character chr(8211);

이란 표에 있는 행을 의미합니다.person찾으시는 제품은 다음과 같습니다.

select p.name
from   person p
where  p.name LIKE '%A%'; --contains the character 'A'

위는 대소문자를 구분합니다.대소문자를 구분하지 않는 검색의 경우 다음을 수행할 수 있습니다.

select p.name
from   person p
where  UPPER(p.name) LIKE '%A%'; --contains the character 'A' or 'a'

특수 문자의 경우 다음을 수행할 수 있습니다.

select p.name
from   person p
where  p.name LIKE '%'||chr(8211)||'%'; --contains the character chr(8211)

LIKE연산자는 패턴과 일치합니다.이 명령어의 구문은 Oracle 설명서에 자세히 설명되어 있습니다.주로 사용하는 것은%0자 이상의 일치 문자를 의미하기 때문에 부호를 지정합니다.

ADTC의 답변은 문제 없습니다만, 저는 다른 해결책을 찾아냈기 때문에 누군가 다른 것을 원하신다면 여기에 올립니다.

ADTC의 솔루션이 더 낫다고 생각하지만, 제 솔루션도 효과가 있습니다.

여기 제가 찾은 다른 해결책이 있습니다.

select p.name
from   person p
where  instr(p.name,chr(8211)) > 0; --contains the character chr(8211) 
                                    --at least 1 time

감사해요.

키워드를 사용하였습니다.CONTAINS를 참조하십시오. CONTAINSOracle*로 인덱스된 컬럼에 대해 검색할 수 있습니다.텍스트 전체 텍스트 색인.

이러한 열은 전체 텍스트 색인화되므로 전체 테이블 검색을 트리거하지 않고 텍스트 열이 있는 모든 위치에서 단어와 구문을 검색하도록 효율적으로 쿼리할 수 있습니다.사용 방법에 따라 LIKE 또는 INSTR을 사용하면 거의 항상 전체 테이블 검색이 수행됩니다.

CONTAINS단어와 구문을 검색할 때 사용합니다.옵션은 많지만 'A' 또는 chr(8211)와 같은 삽입 문자를 찾는 경우에는 적합하지 않습니다.

다음 쿼리는 텍스트의 임의의 위치에 "smith"라는 단어를 포함하는 모든 행을 반환합니다.

SELECT score(1), p.name
FROM person p
WHERE CONTAINS(p.name, 'smith', 1) > 0;

상세한 것에 대하여는, 다음을 참조해 주세요.

열에 할 해서 이 값을 할 수 있습니다.regexp_like첫 번째 파라미터는 체크할 컬럼 이름이고 두 번째 파라미터는 정규 표현입니다.

아래 sql이 0보다 큰 개수를 반환하는 경우, 이는 1개 이상의 문자가 포함된 행이 있음을 의미합니다.

SELECT COUNT(*) 
FROM TABLE_NAME 
WHERE regexp_like (COLUMN_NAME, '[^0-9]')

언급URL : https://stackoverflow.com/questions/20346551/use-string-contains-function-in-oracle-sql-query