Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] mit Umlauten suchen - SQL Server findet trotz Collation-Angabe nicht
tkrasinger
myCSharp.de - Member



Dabei seit:
Beiträge: 574
Herkunft: Enzesfeld (Niederösterreich)

Themenstarter:

[erledigt] mit Umlauten suchen - SQL Server findet trotz Collation-Angabe nicht

beantworten | zitieren | melden

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)
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von tkrasinger am .
private Nachricht | Beiträge des Benutzers
t2t
myCSharp.de - Member



Dabei seit:
Beiträge: 415
Herkunft: Hamburg

beantworten | zitieren | melden

Zitat von tkrasinger
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%')
private Nachricht | Beiträge des Benutzers
Darth Maim
myCSharp.de - Member



Dabei seit:
Beiträge: 216

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers
tkrasinger
myCSharp.de - Member



Dabei seit:
Beiträge: 574
Herkunft: Enzesfeld (Niederösterreich)

Themenstarter:

beantworten | zitieren | melden

@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
private Nachricht | Beiträge des Benutzers