Oracle의 varchar 정렬 순서가 varchar 비교 동작과 일치하지 않는 이유는 무엇입니까?
SQL 문은 다음과 같습니다.
select * from (
select '000000000000' as x from dual
union
select '978123456789' as x from dual
union
select 'B002AACD0A' as x from dual
) /*where x>'000000000000'*/ order by x;
수율:
B002AACD0A
000000000000
978123456789
WHERE-Restriction을 해제한 후 결과는 다음과 같습니다.
B002AACD0A
978123456789
저는 결과가 그저 그럴 것이라고 예상했을 것입니다.978123456789
부터B002AACD0A
이전에 반환됩니다.000000000000
제한 없이 쿼리를 실행할 때.
이러한 행동은 어떻게 설명될 수 있습니까?그리고 어떻게 하면 varchars를 정렬하고 비교할 수 있을까요? 그러면 제가 정수를 사용할 수 있는 것처럼 함께 작업할 수 있게 되죠.
재미있게도, 제한을 다음으로 변경할 때.x>'B002AACD0A'
, 결과가 비어 있습니다.로 변경하기x>978123456789
돌아온다B002AACD0A
.
예를 들어 비교할 때:
B002AACD0A > 978123456789 > 000000000000
그러나 정렬할 때:
978123456789 > 000000000000 > B002AACD0A
이진 정렬을 명시적으로 사용하는 경우 (order by NLSSORT(x,'NLS_SORT=BINARY_AI')
), 결과는B002AACD0A>978123456789>000000000000
그리고 비교의 행동을 일치시킵니다.하지만 저는 아직도 왜 이런 일이 일어나는지 모르겠어요.
피터야.
정렬 동작은 세션 매개 변수에 의해 조절되는 반면 비교 동작은 매개 변수에 따라 달라집니다.일치하지 않는 것이 틀림없습니다.
저는 다음 파라미터를 사용했을 때와 동일한 결과를 얻습니다.
SQL> SELECT *
2 FROM nls_session_parameters
3 WHERE parameter IN ('NLS_COMP', 'NLS_SORT');
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_SORT FRENCH
NLS_COMP BINARY
그러나 두 개가 일치하면 결과는 일치합니다.
SQL> alter session set nls_comp=LINGUISTIC;
Session altered
SQL> select * from (
2 select '000000000000' as x from dual
3 union
4 select '978123456789' as x from dual
5 union
6 select 'B002AACD0A' as x from dual
7 ) /*where x>'000000000000'*/ order by x;
X
------------
B002AACD0A
000000000000
978123456789
SQL> select * from (
2 select '000000000000' as x from dual
3 union
4 select '978123456789' as x from dual
5 union
6 select 'B002AACD0A' as x from dual
7 ) where x > '000000000000' order by x;
X
------------
978123456789
언급URL : https://stackoverflow.com/questions/7190714/why-does-oracles-varchar-sort-order-not-match-the-behavior-of-varchar-compariso
'programing' 카테고리의 다른 글
스프링 부츠 콜드 스타트 (0) | 2023.10.02 |
---|---|
실행 후 PHP StdErr() (0) | 2023.10.02 |
HTML 페이지에 XML 내용 표시 (0) | 2023.10.02 |
PHP: 배열에서 키를 가져오시겠습니까? (0) | 2023.10.02 |
생성된 d3 html에서 angularjs directives를 어떻게 사용합니까? (0) | 2023.10.02 |