'Oracle의 문자열비교'에 해당되는 글 1건

  1. 2010.06.24 Oracle의 문자열비교
02.Oracle/DataBase2010. 6. 24. 09:44
반응형
ORACLE에서 문자열을 비교하기 위해 Blank-Padded Comparison Semantics 과Nonpadded Comparison Semantics 이라는 방법을 사용한다. 여기에서 주의할 점은 Blank-Padded Comparison Semantics과 Nonpadded Comparison semantics의 결과가 항상 일치하는 것이 아니라는 점이다.

그러면 사례를 통해 두 비교방식에 대하여 알아보도록 하자.

Blank Padded Comparison
Nonpadded Comparison

'ab' > 'aa'
'ab' > 'aa'

'ab' > 'a '
'ab' > 'a '

'ab' > 'a'
'ab' > 'a'

'ab' = 'ab'
'ab' = 'ab'

'a ' = 'a'
'a ' > 'a'


위의 사례를 보면 비교되는 문자열이 Blank를 포함하고 있으면 padding과 non padding이 다른 결과를 나타내고 있다.

1.Blank-Padded Comparison Semantics

비교되는 두 값이 서로 다른 길이를 가질 경우에 길이가 짧은 쪽에 공백을 추가하여 길이를 동일하게 한다.
서로 다른 문자 값이 나타날 때까지 문자 단위로 비교를 수행한다.
서로 다른 값이 나타나면 문자 값이 큰 컬럼이 크다고 판단하고 비교를 종료한다. 그러나 서로 다른 값이 나타나지 않으면 중간에 어떤 유효한 값이 나타날 지를 알 수가 없기 때문에 끝까지 비교를 하게 된다. 만약 끝까지 비교를 하고도 다른 문자가 나타나지 않으면 같다고 판단한다.
Oracle에서 이 비교방식을 사용하는 경우는 다음과 같다.

양쪽 모두가 CHAR 혹은 NCHAR 타입인 경우
양쪽 모두가 문자타입의 상수일 경우
사용자 함수에서 반환된 값
2.Nonpadded Comparison Semantics

서로 다른 문자 값이 나타날 때까지 문자 단위로 비교를 수행한다.
서로 다른 값이 나타나면 문자 값이 큰 컬럼이 크다고 판단하고 비교를 종료한다. 만약 값이 같다면 길이가 짧은 컬럼만큼만 비교한 후 각 컬럼의 길이를 비교하여 길이가 긴 컬럼이 크다고 판단한다.
Oracle에서 이 비교방식을 사용하는 경우는 다음과 같다.

비교되는 값 중에 VARCHAR2 혹은 NVARCHAR2가 있을 경우 

[출처] Oracle의 문자열비교|작성자 짱가

Posted by 1010