2010-11-30 41 views
1

Salut J'essaie de trouver toutes les lignes dans ma base de données (SQL Server) qui ont le caractère é dans leur texte en exécutant les requêtes suivantes.Comment comparer les caractères Unicode dans le serveur SQL?

SELECT COUNT(*) FROM t_question WHERE patindex(N'%[\xE9]%',question) > 0; 

SELECT COUNT(*) FROM t_question WHERE patindex(N'%[\u00E9]%',question) > 0; 

Mais j'ai trouvé deux problèmes: (a) Les deux d'entre eux reviennent nombre différent de lignes et (b) Ils sont le retour de lignes qui n'ont pas le caractère spécifié.

Est-ce que la façon dont je construis l'expression régulière et la comparaison de l'Unicode est correcte?

EDIT:

La colonne question est stockée en utilisant le type de données nvarchar. La requête suivante donne cependant le résultat correct.

SELECT COUNT(*) FROM t_question WHERE question LIKE N'%é%'; 

Répondre

4

Pourquoi ne pas utiliser SELECT COUNT(*) FROM t_question WHERE question LIKE N'%é%'?

NB: Like et patindex ne ne pas accepter des expressions régulières. Dans la syntaxe du modèle SQL Server [\xE9], match any single character within the specified set. c'est-à-dire correspondent à \, x, E ou 9. Ainsi, l'une des chaînes suivantes correspondrait à ce modèle.

  • "éléphant"
  • "axe"
  • "99,9"
+0

Ainsi, la première est une correspondant à \, 0,0, E ou 9? Existe-t-il un moyen de spécifier réellement l'Unicode dans la requête? – rkg

+0

@Ravi - Vous pouvez utiliser 'WHERE patindex (N '%' + NCHAR (0xE9) + '%', question)> 0' si pour une raison quelconque vous ne voulez pas simplement utiliser le littéral' WHERE patindex (N ' % é% ', question)> 0' –

+0

Merci beaucoup Martin. Cela a vraiment aidé. J'avais l'impression que PATINDEX supporte les expressions régulières normales. – rkg