SQL Server COMME contenant des crochets

utilisant SQL Server 2008. J'ai un tableau avec la colonne suivante:

sampleData (nvarchar(max))

, La valeur de cette colonne dans certaines de ces lignes sont des listes formatées comme suit:

["value1","value2","value3"]

j'essaye d'écrire une requête simple qui retournera toutes les lignes avec des listes formatées comme ceci, en détectant simplement le crochet d'ouverture.

SELECT * from sampleTable where sampleData like '[%'

la requête ci-dessus ne fonctionne pas parce que ' [' est un caractère spécial, et je ne peux pas pour la vie de moi trouver comment échapper à la parenthèse de sorte que ma requête fait ce que je veux.

Merci pour toutes les suggestions!

46
demandé sur gbn 2010-09-07 21:33:59

3 réponses

 ... like '[[]%'

vous utilisez [ ] pour entourer un caractère spécial (ou gamme)

voir la section "Utilisation de caractères génériques comme Lettres" dans serveur SQL comme

Edit, 24 Nov 2011

Note: vous n'avez pas besoin d'échapper au support de fermeture...

65
répondu gbn 2011-11-24 06:56:54

outre la réponse de gbn, l'autre méthode consiste à utiliser l'option ESCAPE :

SELECT * from sampleTable where sampleData like '\[%' ESCAPE '\'

voir la documentation pour plus de détails

26
répondu Ed Harper 2010-09-07 18:28:51

juste une autre note ici... Si vous voulez inclure le bracket (ou d'autres specials) dans un ensemble de caractères, vous n'avez que l'option D'utiliser ESCAPE (puisque vous utilisez déjà les crochets pour indiquer l'ensemble). Vous devez aussi spécifier la clause ESCAPE, puisqu'il n'y a pas de caractère escape par défaut (ce n'est pas backslash par défaut comme je l'ai pensé, venant d'un arrière-plan en C).

p.ex. si je veux retirer des lignes où une colonne contient quelque chose en dehors de un ensemble de caractères "acceptables", pour les besoins de l'argument disons alphanumériques... nous pourrions commencer par ce

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9]%'

donc nous retournons tout ce qui a un caractère qui n'est pas dans la liste (en raison du caractère principal de caret^).

si nous voulons alors ajouter des caractères spéciaux dans cet ensemble de caractères acceptables, nous ne pouvons pas emboîter les crochets donc nous devons utiliser un caractère escape, comme ceci...

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9\[\]]%' ESCAPE '\'

précédant les crochets (individuellement) avec antislash et indiquant que nous utilisons antislash pour le caractère escape nous permet de Les échapper dans les crochets de fonctionnement indiquant l'ensemble des caractères.

Désolé pour le muet exemple, mais j'espère que ça aide quelqu'un

2
répondu KeithFearnley 2015-06-02 09:16:03