Discussion:
Sortierung mit Umlauten
(zu alt für eine Antwort)
Micha Wienand
2003-11-11 10:22:00 UTC
Permalink
Hallo NG,

ich habe ein Feld mit Namen und möchte diese alphabetisch sortiert ausgeben.
Das klappt auch, solange keine Umlaute vorkommen. Namen, die mit einem
Umlaut beginnen stehen immer am Ende der Liste.

Gibt es eine Möglichkeit, die Umlaute (z. B. Ö als Oe) in die Liste
einsortieren zu lassen?

Danke, Micha.
Elmar Boye
2003-11-11 14:12:08 UTC
Permalink
Hallo Micha,
Post by Micha Wienand
ich habe ein Feld mit Namen und möchte diese alphabetisch sortiert
ausgeben. Das klappt auch, solange keine Umlaute vorkommen. Namen,
die mit einem Umlaut beginnen stehen immer am Ende der Liste.
Gibt es eine Möglichkeit, die Umlaute (z. B. Ö als Oe) in die Liste
einsortieren zu lassen?
Mit den Zeichensätzen ist beim SQL Server zugleich eine Sortierreihenfolge
verbunden. Und solange Du eine ordentliche Sortierreihenfolge, wie z. B.
Latin1_General_CI_AS verwendest wird das automatisch erledigt.
Das von Dir beschriebene Verhalten tritt, dann auf wenn Du eine
binäre Sortierreihenfolge verwendest. Dort werden die Zeichen
laut ANSI-Codes einsortiert und da liegen die Umlaute (uam) nunmal
weit hinten.

CREATE TABLE Tabelle(
Spalte1 varchar(10) COLLATE Latin1_General_CI_AS,
Spalte2 varchar(10) COLLATE Latin1_General_BIN)

INSERT INTO Tabelle (Spalte1, Spalte2) VALUES('abc', 'abc')
INSERT INTO Tabelle (Spalte1, Spalte2) VALUES('äbc', 'äbc')
INSERT INTO Tabelle (Spalte1, Spalte2) VALUES('bbc', 'bbc')
GO
SELECT Spalte1 FROM Tabelle ORDER BY Spalte1
SELECT Spalte2 FROM Tabelle ORDER BY Spalte2

-- Hilfslösung:
SELECT Spalte2 COLLATE Latin1_General_CI_AS
FROM Tabelle
ORDER BY Spalte2 COLLATE Latin1_General_CI_AS

DROP TABLE Tabelle
GO

Du solltest folglich Deine Sortierfolge umbauen. Oder übergangsweise
die Hilfslösung mittels COLLATE von oben einsetzen (wenn SQL Server 2000).

Gruss
Elmar

Loading...