J'essaie de filtrer les éléments avec une procédure stockée en utilisant comme. La colonne est un varchar (15). Les éléments que j'essaye de filtrer ont des crochets dans le nom.
Par exemple: WC[R]S123456
.
Si je fais LIKE 'WC[R]S123456'
ça, il ne retournera rien.
J'ai trouvé des informations sur l'utilisation du ESCAPE
mot clé avec LIKE
mais je ne comprends pas comment l'utiliser pour traiter les crochets comme une chaîne régulière.
LIKE '[fz]oo'
correspondra à la fois à «foo» et à «zoo».LIKE 'WC\[R]S123456' ESCAPE '\'
car il est plus lisible pour la maintenance.Disons que vous voulez faire correspondre le littéral
its[brac]et
.Vous n'avez pas besoin d'échapper au
]
car il n'a une signification particulière que lorsqu'il est associé[
.Il
[
suffit donc de s'échapper pour résoudre le problème. Vous pouvez vous échapper[
en le remplaçant par[[]
.la source
[[]
semble bizarre, mais cela a du sens lorsque vous le regardez du point de vue de l'analyseur. L'analyseur a une règle spécifique pour gérer les caractères entre[ ]
. Ainsi, le texteits[brac]et
signifie: "Recherchez les chaînes consécutives suivantes:,its
(appliquez la règle aux crochets:)brac
,et
" . D'un autre côté,its[[]brac]et
signifie: "Trouvez les chaînes consécutives suivantes:,its
(appliquez la règle pour les crochets:)[
,brac]et
" .J'avais besoin d'exclure des noms commençant par un trait de soulignement d'une requête, donc je me suis retrouvé avec ceci:
la source
Voici ce que j'ai réellement utilisé:
la source
Le mot clé ESCAPE est utilisé si vous devez rechercher des caractères spéciaux tels que% et _, qui sont normalement des caractères génériques. Si vous spécifiez ESCAPE, SQL recherchera littéralement les caractères% et _.
Voici un bon article avec quelques exemples supplémentaires
la source
Si vous devez échapper des caractères spéciaux comme «_» (soulignement), comme c'était le cas dans mon cas, et que vous ne souhaitez pas / ne pouvez pas définir de clause ESCAPE, vous pouvez mettre le caractère spécial entre crochets »[ ' et '] ' .
Cela explique la signification de la chaîne «bizarre» «[[]» - elle englobe simplement le caractère «[» entre crochets, ce qui lui échappe efficacement.
Mon cas d'utilisation était de spécifier le nom d'une procédure stockée avec des traits de soulignement en tant que critère de filtre pour le profileur. J'ai donc mis la chaîne '% name [_] de [_] une [_] procédure [_] stockée%' dans un champ TextData LIKE et cela m'a donné les résultats de trace que je voulais atteindre.
Voici un bon exemple de la documentation: LIKE (Transact-SQL) - Utilisation de caractères génériques comme littéraux
la source
Selon la documentation :
Vous devez échapper à ces trois personnages
%_[
:la source
Au lieu de «\» ou d'un autre caractère du clavier, vous pouvez également utiliser des caractères spéciaux qui ne sont pas sur le clavier. En fonction de votre cas d'utilisation, cela peut être nécessaire si vous ne souhaitez pas que la saisie utilisateur soit accidentellement utilisée comme caractère d'échappement.
la source
¬
- c'est toujours un caractère de clavier au Royaume-Uni mais rarement utilisé sciemment :) (en haut à gauche entreEsc
etTab
)Utilisez Suivant.
Pour que la saisie par l'utilisateur effectue une recherche telle qu'elle est, utilisez escape, car elle nécessitera le remplacement suivant pour tous les caractères spéciaux (ci-dessous couvre tout SQL Server).
Ici, les guillemets simples "" ne sont pas pris car ils n'affectent pas la même clause car il s'agit d'une concaténation de chaînes.
"-" & "^" & "]" n'est pas requis car nous échappons à "[".
Ensuite, dans SQL Query, cela devrait être comme suit. (Dans une requête paramétrée, une chaîne peut être ajoutée avec des modèles après le remplacement ci-dessus).
Pour rechercher la chaîne exacte.
Pour commencer la recherche avec une chaîne
Pour rechercher fin avec chaîne
Pour rechercher contient avec chaîne
et ainsi de suite pour d'autres correspondances de motifs. Mais la saisie directe par l'utilisateur doit être formatée comme mentionné ci-dessus.
la source
Il y a un problème en cela:
et:
Les deux fonctionnent pour SQL Server mais aucun ne fonctionne pour Oracle.
Il semble qu'il n'y ait aucun moyen ISO / CEI 9075 de reconnaître un motif impliquant une accolade gauche.
la source