Select auf varchar

19/06/2009 - 16:27 von Andreas Widmann | Report spam
Hallo,

wir haben ein Problem bei einer eigentlich primitiven SELECT-Abfrage.

SELECT KUNDENNUMMER FROM TABLE WHERE KUNDENNUMMER <= '§§§§§§'

Dieses Abfrage ergibt als Resultat 0 Sàtze, obwohl das
Paragraph-Zeichen(§) weitaus höher angesiedelt ist, als das kleine 'z'.
Wird dieselbe Abfrage mit <= 'zzzzzz' durchgeführt, so werden sàmtliche
Datensàtze aufgelistet. Auch sàmtliche Versuche mit anderen ANSI-Zeichen
waren vergebens Euro-Zeichen und Sonderzeichen jenseits von 0x80.

Weiß jemand Rat? Auf DB2 hatte ich noch nie dieses Problem.

Danke

Andreas Widmann
 

Lesen sie die antworten

#1 Elmar Boye
19/06/2009 - 17:05 | Warnen spam
Hallo Andreas,

Andreas Widmann schrieb:
wir haben ein Problem bei einer eigentlich primitiven SELECT-Abfrage.

SELECT KUNDENNUMMER FROM TABLE WHERE KUNDENNUMMER <= '§§§§§§'

Dieses Abfrage ergibt als Resultat 0 Sàtze, obwohl das
Paragraph-Zeichen(§) weitaus höher angesiedelt ist, als das kleine 'z'.
Wird dieselbe Abfrage mit <= 'zzzzzz' durchgeführt, so werden sàmtliche
Datensàtze aufgelistet.



Da dürftest Du einem Irrtum unterliegen, wie der SQL Server
Zeichenketten vergleicht. Dies erfolgt nicht anhand des ASCII Codes,
sondern anhand einer Sortiertabelle, die je nach Sortierung eine
andere sein kann.

Bei den Standard-Sortierungen wie Latin1_General_CI_AS liegt "z"
in der Sortierung ziemlich am Ende. Unter
<URL:http://groups.google.de/group/micro...87225e>
findest Du ein Skript, wo wir mal einem Ausreißer auf die Spur gekommen sind.

Folgendes zeigt Dir das Paragraph-Zeichen und das "z" alleine an:
SELECT *
FROM #chars
WHERE value IN (ASCII('§'), ASCII('z'))
GO

Das Sortierverhalten wird im übrigen von allen Programmiersprachen,
die auf den Windows-Vergleichsfunktionen aufsetzen, unterstützt
wie VB(A), .NET uvm.

Weiß jemand Rat? Auf DB2 hatte ich noch nie dieses Problem.



Mit der "richtigen" Sortierfolge sollte sich auch DB2 so verhalten.

Die andere Frage wàre, wieso Du diese mehr oder wenige überflüssige
Bedingung einbaust?
Z. B. um Spalten ohne Werte zu unterscheiden, wàre NULL besser geeignet.

Gruß Elmar

Ähnliche fragen