2010-09-29 3 views
6

Quando provo correre ...Interrogazione per ae æ partite in SQL Server/LINQ to SQL

SELECT * FROM Users WHERE Username = 'ae' restituisce partite in cui il nome utente è æ (carattere cenere).

Mi chiedevo se c'è un modo per supportare personaggi come il personaggio di cenere ma ottenere una corrispondenza esatta per quello che sto cercando.

mi piacerebbe cercare AE e ottenere solo ae, non AE e æ

sto usando SQL Server 2008 e SQL Server 2008 R2.

+0

forse non sto ottenendo quello che stai dopo. Volevi avere istanze di "ae" essere considerate due caratteri "ae" E il singolo carattere "æ'? –

+0

@ p.campbell quando cerco per me voglio solo il letterale e non l'ho corrispondenza æ –

risposta

2

Questo non sembra accadere con confronti SQL

;with Users As 
(
select 'æ' as Username UNION ALL SELECT 'ae' 
) 
SELECT * 
FROM Users WHERE Username = 'ae' collate SQL_Latin1_General_CP1_CI_AS 
+0

Quando sono riuscito a riprodurre il tuo esempio, ma non lo uso nella mia applicazione, ho iniziato a giocare. Se prefissi le tue stringhe con 'N', il codice si interromperà. Quindi a quanto pare ha qualcosa a che vedere con 'VARCHAR' contro' NVARCHAR'. Qualcuno può spiegarlo (o indicare una risorsa)? – Brad

0

È possibile utilizzare un confronto ordinale per il confronto. Per esempio:

SELECT * 
FROM Users 
WHERE Username = 'ae' COLLATE Latin1_General_BIN 
+0

Questo rende la query case-sensitive, è comunque necessario averli entrambi? –