![]() |
Datenbank: Oracle • Version: 11g • Zugriff über: Ado->ODBC
Sortieren liefert bei Werten mit Unterstrich unterschiedliche Ergebnisse
Hallo,
das folgende SQL-Test-Statement liefert auf verschiedenen Rechnern unterschiedliche Ergebnisse:
SQL-Code:
SELECT * FROM
( SELECT '_TEST' AS NAME FROM DUAL UNION ALL SELECT 'TASTE' AS NAME FROM DUAL UNION ALL SELECT 'baum' AS NAME FROM DUAL UNION ALL SELECT 'zaun' AS NAME FROM DUAL ) ORDER BY UPPER(NAME)
Code:
Das Problem ist der Unterstrich/Underscore.
Auf Rechner 1: Auf Rechner 2:
(Überraschung) (das Erwartete) baum baum TASTE TASTE _TEST zaun zaun _TEST Es wird die selbe Datenbank abgefragt, NLS_SORT steht in beiden Fällen auf Binary. Der installierte Oracle-Client scheint auch der selbe zu sein 11.2.0. Was kann Clientseitig das Sortieren auf der Datenbank noch beeinflussen? |
AW: Sortieren liefert bei Werten mit Unterstrich unterschiedliche Ergebnisse
Die Zeichensätze haben praktisch eine "eigene" Sortierung und bei Rechner 1 wird dann halt der _ bei der Sortierung eben nicht beachtet.
Fazit: Prüft mal, was da bei Connection/Datenbankt/Tabelle/Feldern als CARACTER SET / COLLATION eingestellt ist. PS: Gilt das OrderBy, bei Unions nicht eh erst für das Endergebnis
SQL-Code:
SELECT '_TEST' AS NAME
UNION SELECT 'TASTE' AS NAME UNION SELECT 'baum' AS NAME UNION SELECT 'zaun' AS NAME ORDER BY UPPER(NAME) |
AW: Sortieren liefert bei Werten mit Unterstrich unterschiedliche Ergebnisse
|
AW: Sortieren liefert bei Werten mit Unterstrich unterschiedliche Ergebnisse
Meine Aussage NLS_SORT steht auf Binary bezog sich nur auf den Server, dank Sir Rufo's Link weiß ich nun, dass da die Einstellung auf dem Client auch eine Rolle spielt und die scheint unterschiedlich zu sein. Während sich ein Kollege nun mit dem Wieso, Weßhalb, Warum beschäftigen darf, hab ich unter dem Link auch die Lösung für mein Problem gefunden:
Code:
@Himitsu:
ORDER BY NLSSORT(UPPER(NAME),''NLS_SORT=BINARY'')';
Hab ich auch gedacht und wenn ich nur "Order By Name" nehme geht das auch. Verwende ich aber dabei z.B. noch die Upper-Funktion "Order By Upper(Name)" kommt die Oracle-Fehlermeldung: "ORA-01785: Order By-Angabe muss Positionsnummer von der SELECT-Liste enthalten" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz