Oracle
 sql >> база данни >  >> RDS >> Oracle

Защо реда на сортиране varchar на Oracle не съвпада с поведението на сравнението на varchar?

Петър,

поведението на сортирането се регулира от NLS_SORT параметър на сесията, докато поведението за сравнения зависи от NLS_COMP параметър. Трябва да имате несъответствие.

Получавам същия резултат като вас със следните параметри:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете сравнението на две колони като една колона в Oracle

  2. Разлика между Oracle DATE и TIMESTAMP

  3. SQL множество колони в IN клауза

  4. Как да продължите обработката на курсора след изключение в Oracle

  5. Как да получа текущата година, използвайки SQL на Oracle?