2010-03-17 9 views

Antwort

80

Coerce zu einem Akzent unempfindlich collation

Sie werden auch beide Seiten, um sicherzustellen, müssen die gleiche Sortierfehler oder weitere Zwänge zu vermeiden, wenn Sie eine Tabelle Variable oder temporäre Tabelle varchar Spalte

vergleichen wollen

und weil der konstante Wert wird die Sortierung der Datenbank-Update hat: nur für lokale Variablen, nicht für konstanten Nö, nicht einmal dann

SELECT * 
FROM Venue 
WHERE 
    Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI 
+11

In diesem Fall müssen Sie die Sortierung nicht zweimal angeben: SELECT * FROM Veranstaltungsort WHERE Name wie '% cafe%' COLLATE Latin1_general_CI_AI – PollusB

+0

@PollusB: true, mein Fehler – gbn

+0

Ich habe diese Antwort implementiert, die Suche ist akzentunempfindlich, aber die Nebeneffekt ist, dass mir in der Select-Abfrage etwas Akzent fehlt. Zum Beispiel c mit akut (U + 0107). In Spalteneigenschaften sehe ich SQL_Latin1_General_CP1_CI_AI Sortierung. Ich änderte die Sortierung mit der folgenden Anweisung: ALTER TABLE mytable ALTER COLUMN Beschreibung varchar (48) COLLATE SQL_Latin1_General_CP1_CI_AI. Früher war es die Czech_CI_AS-Kollatierung. Wenn ich die Abfrage in der Antwort verwende, ohne die Sortierung der Spalte zu ändern, funktioniert sie nicht im Entity-Framework. – qub1n

38

durch einen spezifischen Akzent unempfindlich collation zu Ihrem wählen Anwendung:

SELECT * 
FROM Venue 
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI 

Der CI steht für "Case Insensitive" und AI für "Accent Unempfindlich".

+6

Ah, das ist, was alle jene dummen Zeichen am Ende bedeuten. Ich weiß, es ist dumm, aber das hilft eine riesige Menge.Irgendwie scheint DB-Kollaps für mich immer Hirnnebel mit sich zu bringen. – ilivewithian

0

, wenn 'A' COLLATE SQL_Latin1_General_CP1_CS_AS = 'a' COLLATE SQL_Latin1_General_CP1_CS_AS SELECT N'Yes

ELSE SELECT N'No‘
1

Accent Sensitive und Accent Unempfindlich Suche nach Latin1_general_CI_AI mit seinem don kann

Hier AI ist für Accent Insensitive und AS für Accent Sensitive dh Café und Cafe sind die gleichen, wenn Accent Insensitive.

In der folgenden Abfrage Latin1_general_CI_AI kann in die folgenden Teile unterteilt werden.

  • latin1 macht die Server-treat-Strings mit charset Latin 1, im Grunde ascii.

  • CI spezifiziert Groß- und Kleinschreibung, also "ABC" gleich "abc".

  • AI spezifiziert Akzent-unempfindlich, also 'ü' gleich 'u'.

Ihre Abfrage sollte wie folgt lauten:

SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI 

Erwartete Ergebnis wie folgt:

Id name 
1 Café 
2 Cafe