Anmelden

View Full Version : SQL und Umlaute



KM
12-04-16, 07:41
Hallo,

ich versuche gerade per SQL in einem Textfeld nach Umlauten zu suchen. Ich hab es sowohl mit LIKE als auch mit LOCATE versucht. Jedoch erhalte ich z.B. bei der Suche nach "ü" auch alle Ergebnisse, die nur ein "u" enthalten.
Wie kann ich denn gezielt nach Umlauten suchen?

Vielen Dank,
KM

Fuerchau
12-04-16, 08:01
Da steht dann die Sortierung auf SRTSEQ=*LANGIDSHR, so dass hier eine Bewertung nach Sprache stattfindet.
Diese Einstellung ist Sitzungsbezogen.
Wenn du eine Binärsuche benötigst musst du eine eigene ACTGRP verwenden und SRTSEQ=*HEX verwenden. Ggf., das habe ich noch nicht ausprobiert, reicht das auch für ein separates Modul.

KM
12-04-16, 08:11
Mit der Treibereigenschaft sort=hex hat es nun funktioniert.

Vielen Dank,
KM

BenderD
12-04-16, 08:23
where hex(replace(name, 'ü', 'u')) <> hex(name)
sollte unabhängig von sort gehen

D*B

KM
12-04-16, 08:46
nicht ganz, denn es werden auch Sätze gefunden bei denen ein großes "U" vorkommt.

Gruß,
KM

BenderD
12-04-16, 09:00
... ich kann zwar die krude Logik von replace nicht nachvollziehen, aber das kann man ihm noch mit
where hex(translate(name, 'uU', 'üÜ')) <> hex(name)
abgewöhnen.

D*B

KM
12-04-16, 09:18
Ja, damit funktioniert es nun.

Danke,
KM

Fuerchau
12-04-16, 09:53
Bedingt. Ein HEX(Inhalt) liefert die Hexdarstellung des Inhalts.
Der Locate mit HEX kann allerdings auch die falsche Position (Vorkommen) liefern, da der zu suchende Wert über 2 Halbbytes vorkommen kann. Je mehr Zeichen verwendet werden desto geringer die Wahrscheinlichkeit.
Ggf. bringt dann wiederum ein "cast(Name as binary(xx))" bzw. "cast( name as char(nn) ccsid 65535)" was, da hier keinesfalls LANGID verwendet wird.

BenderD
12-04-16, 12:48
Bedingt. Ein HEX(Inhalt) liefert die Hexdarstellung des Inhalts.
Der Locate mit HEX kann allerdings auch die falsche Position (Vorkommen) liefern, da der zu suchende Wert über 2 Halbbytes vorkommen kann.

... das ändert den Wahrheitsgehlt nicht! Der translate erfolgt über character und anschließend werden komplette Strings verglichen, das hex hat hier nur den Sinn dem Vergleich die Flausen abzugewöhnen.

D*B

Fuerchau
12-04-16, 12:54
Ich bezog mich ja auch auf den Locate, der einen String durchsucht.
Für Komplettvergleiche gebe ich dir uneingeschränkt Recht.