Warum stimmt die Varchar-Sortierreihenfolge von Oracle nicht mit dem Verhalten des Varchar-Vergleichs überein?

8

Eine SQL-Anweisung wie

%Vor%

ergibt

%Vor%

Nach dem Auskommentieren der WHERE-Einschränkung ist das Ergebnis

%Vor%

Ich hätte erwartet, dass das Ergebnis nur 978123456789 ist, da B002AACD0A vor 000000000000 zurückgegeben wird, wenn die Abfrage ohne Einschränkung ausgeführt wird.

Wie kann dieses Verhalten erklärt werden? Und wie soll ich Varchare sortieren und vergleichen, damit sie zusammen arbeiten können, wie ich es mit ganzen Zahlen machen kann?

BEARBEITEN : Lustig genug, wenn die Einschränkung auf x>'B002AACD0A' geändert wird, ist das Ergebnis leer. Wenn Sie es in x>978123456789 ändern, wird B002AACD0A zurückgegeben.

i.e. beim Vergleich:

%Vor%

aber beim Sortieren

%Vor%

EDIT 2 : Bei expliziter Verwendung der binären Sortierung ( order by NLSSORT(x,'NLS_SORT=BINARY_AI') ) ist das Ergebnis B002AACD0A>978123456789>000000000000 und entspricht dem Verhalten des Vergleichs. Aber ich habe immer noch keine Ahnung, warum das passiert.

    
Peter P 25.08.2011, 12:56
quelle

1 Antwort

13

Peter,

Das Verhalten der Sortierung wird durch die NLS_SORT Session-Parameter, während das Verhalten für Vergleiche abhängig ist von der NLS_COMP Parameter. Sie müssen eine Diskrepanz haben.

Ich erhalte das gleiche Ergebnis wie Sie mit den folgenden Parametern:

%Vor%

Wenn die beiden jedoch übereinstimmen, ist das Ergebnis konsistent:

%Vor%     
Vincent Malgrat 25.08.2011, 13:26
quelle

Tags und Links