Supportnet / Forum / Datenbanken
sql-Abfrage m. ORDER BY ASC und Umlaute...
Frage
Hallo,
ich möchte aus einer Tabelle Sätze, sortiert nach Namen ausgeben. Diese Namen enthalten jedoch auch Umlaute wie "ä" (Z.B. der Name "Gärtner"). Wenn ich die Sortierung aufsteigend erfolgen lasse (ORDER BY name ASC), dann werden mir Namen, die solche Umlaute enthalten, an die letzte Stelle gesetzt.
Das heißt z.B. bei vorhandenen Namen "Gast","Gärtner","Gemmel" u. "Goppel"
steht nach der Sortierung "Gärtner" hinter "Goppel".
Das liegt daran, dass in der ASCII-Tabelle die Umlaute einen höheren Wert haben ("ä" entspr. ASCII 220, während die anderen "normalen" Buchstaben wie z.B. "o" alle niedrigere Werte haben.
Was kann man machen, dass die Sortierung so ausfällt, dass "ä" wie "ae" einsortiert wird (die Weiterverarbeitung erfolgt mittels php)?
Vielen Dank für Hinweise
Antwort 1 von FrankieH
Es kommt ja anscheinend auf den Zeichensatz an, den Du bei Deiner Eingabemaske verwendest.
Vielleicht verwendest Du ein Sortierfeld, das Du mittels einer Update-Anweisung immer nachführst. Dort ersetzt Du dann die Umlaute durch ae, oe, ue, manche machen sortieren diese Umlaute auch direkt ein (wird also behandelt wie a, o ,u).
Umlaute und ß werden halt etwas stiefmütterlich behandelt.
Vielleicht verwendest Du ein Sortierfeld, das Du mittels einer Update-Anweisung immer nachführst. Dort ersetzt Du dann die Umlaute durch ae, oe, ue, manche machen sortieren diese Umlaute auch direkt ein (wird also behandelt wie a, o ,u).
Umlaute und ß werden halt etwas stiefmütterlich behandelt.
Antwort 2 von Gabi
Die Idee mit dem Sortierfeld ist gut.
Ich würde gerne das Erstellen eines extra Feldes dafür umgehen und das Sortierfeld in der Select-Abfrage erzeugen.
Das geht, wenn ich den Replace nur für einen Buchstaben mache. Möchte ich jedoch alle möglichen Umlaute ersetzen, dann laufe ich auf Fehler. Ich hab keine korrekte sql-Abfrage dafür.
Es funktioniert folgendes:
Select *,(replace (autorname,"ä","ae")) as name_s from tabelle order by name_s asc
Es funktioniert nicht:
Select *, (replace ((autorname,"ä","ae") && (autorname,"ö","oe"))) as name_s from tabelle order by name_s asc
auch nicht:
Select *,((replace(autorname,"ä","ae")) && (replace (autorname,"ö","oe"))) as name_s from tabelle order by name_s asc
Kann man was mit Regular Expressions machen???
Ich würde gerne das Erstellen eines extra Feldes dafür umgehen und das Sortierfeld in der Select-Abfrage erzeugen.
Das geht, wenn ich den Replace nur für einen Buchstaben mache. Möchte ich jedoch alle möglichen Umlaute ersetzen, dann laufe ich auf Fehler. Ich hab keine korrekte sql-Abfrage dafür.
Es funktioniert folgendes:
Select *,(replace (autorname,"ä","ae")) as name_s from tabelle order by name_s asc
Es funktioniert nicht:
Select *, (replace ((autorname,"ä","ae") && (autorname,"ö","oe"))) as name_s from tabelle order by name_s asc
auch nicht:
Select *,((replace(autorname,"ä","ae")) && (replace (autorname,"ö","oe"))) as name_s from tabelle order by name_s asc
Kann man was mit Regular Expressions machen???
Antwort 3 von hendrikw
Kannst Du die replaces nicht ineinander schachteln ?
replace(replace(name,"ä","ae"),"ö","oe")...
mfg
Hendrik
replace(replace(name,"ä","ae"),"ö","oe")...
mfg
Hendrik
Antwort 4 von Gabi
Mit der Schachtelung klappt es !!!
Danke.
Ich versteh zwar nicht, warum eine Und-Verknüpfung nicht klappt, aber Hauptsache, ein Weg ist der Richtige...
mfg
Gabi
Danke.
Ich versteh zwar nicht, warum eine Und-Verknüpfung nicht klappt, aber Hauptsache, ein Weg ist der Richtige...
mfg
Gabi

