verwendetes Datenbanksystem: SQL Server 2008 (R2)
SELECT *
FROM (
SELECT cast('Österreich 1' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung
UNION
SELECT cast('Oesterreich 2' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung
) Data
WHERE Bezeichnung like ('%ö%')
vgl zu:
SELECT *
FROM (
SELECT cast('Österreich 1' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung
UNION
SELECT cast('Oesterreich 2' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung
) Data
WHERE Bezeichnung like ('%öst%')
Mit der angegeben Collation sollte oe/ö eigentlich egal sein, beim oberen Statement geht das auch, warum funktioniert das untere nicht?
Muss ich wirklich im Suchstring die Umlaute ersetzen?
und warum funktioniert im Vergleich dazu dieses hier wie erwartet:
SELECT *
FROM (
SELECT cast('DassV1' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung
UNION
SELECT cast('DaßV2' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung
) Data
WHERE Bezeichnung like ('%DaßV%')
EDIT:
Umlaut ersetzen geht gar nicht, weil er dann den Eintrag mit dem Ö gar nicht findet. Wie schaffe ich es, nach "öst" zu suchen und beide Einträge zu bekommen (ohne ein OR zu verwenden)
Umlaut ersetzen geht gar nicht, weil er dann den Eintrag mit dem Ö gar nicht findet. Wie schaffe ich es, nach "öst" zu suchen und beide Einträge zu bekommen (ohne ein OR zu verwenden)
Ich hab das REPLACE einfach mal anders rum gemacht. Damit gehts. Wär das ne Alternative?
SELECT *
FROM (
SELECT REPLACE(cast('Österreich 1' as char), 'Oe', 'Ö') as Bezeichnung
UNION
SELECT REPLACE(cast('Oesterreich 2' as char), 'Oe', 'Ö') as Bezeichnung
) Data
WHERE Bezeichnung LIKE ('%öst%')
warum funktioniert das untere nicht?
Weil LIKE '%ö%' auf alles mit 'o', 'ö', 'ô', 'ó', 'ò',... matcht, und du deswegen mit '%ö%' das 'o' in 'oe' findest. Wenn du aber nach '%öst%' suchst, würdest du zwar 'Österreich' und 'Osterreich' finden, aber halt kein 'Oesterreich', da das 'ö' nicht für Oe steht, sondern halt nur für das O.
Darth Maim
@Darth Maim.
Danke, ich wusste nicht, dass mit dem AI tatsächlich nur ein ö = o gemeint ist und nicht ö = oe.
In Kombination mit der Variante von t2t habe ich nun das WHERE umgebaut und damit funktioniert es:
SELECT *
FROM (
SELECT 'Österreich 1' as Bezeichnung
UNION
SELECT 'Oesterreich 2' as Bezeichnung
) Data
WHERE dbo.fn_ReplaceSpecialChars( Bezeichnung) LIKE dbo.fn_ReplaceSpecialChars( '%öst%')
Danke