programing

sql ignoring 대소문자의 문자열을 비교하는 방법

powerit 2023. 2. 27. 22:14
반응형

sql ignoring 대소문자의 문자열을 비교하는 방법

Oracle에서 비교되는 문자열의 대소문자를 무시하고 쿼리를 작성하려면 어떻게 해야 합니까?예를 들어 "천사", "천사", "천사", "천사", "천사", "천사"와 "천사"는 비교 시 모두 동일합니다.

필드 전체 값과 일치하는 경우

WHERE UPPER(fieldName) = 'ANGEL'

편집: 사용하고 싶은 코멘트에서:

SELECT 
    RPAD(a.name, 10,'=') "Nombre del Cliente"
    , RPAD(b.name, 12,'*') "Nombre del Consumidor" 
FROM 
    s_customer a, 
    s_region b 
WHERE 
    a.region_id = b.id 
    AND UPPER(a.name) LIKE '%SPORT%' 

UPER 키워드를 사용할 수 있습니다.

SELECT *
FROM Customers
WHERE UPPER(LastName) = UPPER('AnGel')

다음을 사용할 수 있습니다.

select * from your_table where upper(your_column) like '%ANGEL%'

그렇지 않으면 다음을 사용할 수 있습니다.

select * from your_table where upper(your_column) = 'ANGEL'

Gary Ray가 코멘트에서 제시한 바와 같이 your_column 필드 전후로 추가 문자가 없는 일치를 찾는 경우 효율적입니다.

두 개 이상의 문자열을 비교하기 전에 먼저 다음 명령을 수행합니다.

alter session set NLS_COMP=LINGUISTIC;
alter session set NLS_SORT=BINARY_CI;

이러한 2개의 스테이트먼트가 실행된 후 스트링을 비교할 수 있으며 대소문자가 구분되지 않습니다.예를 들어, 두 문자열 s1='Apple'과 s2='apple'이 있습니다. 위의 문장을 실행하기 전에 두 문자열을 비교하려면 두 문자열이 서로 다른 문자열로 처리되지만 두 개의 변경 문 실행 후 문자열을 비교할 때는 두 문자열 s1과 s2가 동일한 문자열로 처리됩니다.

이 두 가지 문구를 사용하는 이유

10gR2 대소문자를 구분하지 않기 위해서는 NLS_COMP=SYSTIC 및 NLS_SORT=SYST_CI를 설정해야 합니다.이들은 세션 수정이 가능하기 때문에 초기화 파라미터로 설정하는 것만큼 간단하지 않습니다.초기화 파라미터로 설정할 수 있지만 서버에만 영향을 주고 클라이언트 측에는 영향을 주지 않습니다.

Dreamel씨의 답변과 tuinstoel씨의 코멘트에 대한 더 자세한 내용.열의 데이터는 특정 대/소문자에 저장되지만 세션의 대/소문자를 구분하여 일치시킬 수 있습니다.

언어 검색 또는 대소문자를 구분하지 않는 검색을 사용하도록 세션 또는 데이터베이스를 변경할 수 있습니다.특정 정렬 순서를 사용하도록 인덱스를 설정할 수도 있습니다.

ALTER SESSION SET NLS_SORT=BINARY_CI;

영어 이외의 언어를 구사하기 시작하면 억양 등 억양에 민감하지 않은 언어를 추가로 지원합니다.일부 기능은 버전에 따라 다르므로 사용 중인 Oracle 버전에 대한 Globablization 문서를 참조하십시오.최신 제품(11g)은 이쪽

SELECT STRCMP("string1", "string2");

문자열이 같으면 0이 반환됩니다.

  • string1 = string2이면 이 함수는 0을 반환합니다(대소문자를 제외).
  • string1 < string2일 경우 이 함수는 -1을 반환합니다.
  • string1 > string2일 경우 이 함수는 1을 반환합니다.

https://www.w3schools.com/sql/func_mysql_strcmp.asp

문자열 변환 비교를 피하려면 COLATE SQL_Latin1_General_CP1_사용합니다.CI_AS.

예:

SELECT UserName FROM Users
WHERE UserName COLLATE SQL_Latin1_General_CP1_CI_AS = 'Angel'

그러면 ANGEL, Angel, Angel 등 모든 사용자 이름이 반환됩니다.

정확한 구문은 기억나지 않지만 대소문자를 구분하지 않도록 테이블 열을 설정할 수 있습니다.하지만 더 이상 대소문자를 기준으로 매칭할 수 없고, '쿨'이 '쿨'과 일치하지 않도록 하려면 더 이상 매칭할 수 없으므로 주의하십시오.

언급URL : https://stackoverflow.com/questions/871578/how-to-compare-strings-in-sql-ignoring-case

반응형