Estou tentando filtrar itens com um procedimento armazenado usando o like. A coluna é um varchar (15). Os itens que estou tentando filtrar têm colchetes no nome.
Por exemplo: WC[R]S123456
.
Se eu fizer um LIKE 'WC[R]S123456'
, não retornará nada.
Encontrei algumas informações sobre o uso da ESCAPE
palavra-chave, LIKE
mas não entendo como usá-la para tratar os colchetes como uma sequência regular.
LIKE '[fz]oo'
corresponderá a 'foo' e 'zoo'.LIKE 'WC\[R]S123456' ESCAPE '\'
, pois é mais legível para manutenção.Digamos que você queira corresponder ao literal
its[brac]et
.Você não precisa escapar do,
]
pois ele tem um significado especial apenas quando está emparelhado[
.Portanto, escapar
[
é suficiente para resolver o problema. Você pode escapar[
substituindo-o por[[]
.fonte
[[]
parece estranho, mas faz sentido quando você o olha da perspectiva do analisador. O analisador possui uma regra específica de como lidar com caracteres entre eles[ ]
. Portanto, o textoits[brac]et
significa: "Encontre as seguintes seqüências consecutivas:,its
(aplique a regra entre colchetes:)brac
,et
" . Por outro lado,its[[]brac]et
significa: "Encontre as seguintes seqüências consecutivas:,its
(aplique a regra entre colchetes:)[
,brac]et
" .Eu precisava excluir nomes que começassem com um sublinhado de uma consulta, então acabei com isso:
fonte
Aqui está o que eu realmente usei:
fonte
A palavra-chave ESCAPE é usada se você precisar procurar caracteres especiais como% e _, que normalmente são curingas. Se você especificar ESCAPE, o SQL procurará literalmente os caracteres% e _.
Aqui está um bom artigo com mais alguns exemplos
fonte
Se você precisar escapar de caracteres especiais como '_' (sublinhado), como no meu caso, e não estiver disposto / não capaz de definir uma cláusula ESCAPE, convém incluir o caractere especial entre colchetes '[ ' e '] ' .
Isso explica o significado da string "estranha" '[[]' - ela apenas abraça o caractere '[' entre colchetes, escapando-o efetivamente.
Meu caso de uso foi especificar o nome de um procedimento armazenado com sublinhados como um critério de filtro para o Profiler. Então, eu coloquei a string '% name [_] de [_] um [_] procedimento armazenado [_]%' em um campo TextData LIKE e isso me deu resultados de rastreamento que eu queria alcançar.
Aqui está um bom exemplo da documentação: LIKE (Transact-SQL) - Usando caracteres curinga como literais
fonte
De acordo com a documentação :
Você precisa escapar desses três caracteres
%_[
:fonte
Em vez de '\' ou outro caractere no teclado, você também pode usar caracteres especiais que não estão no teclado. Dependendo do seu caso de uso, isso pode ser necessário, se você não desejar que a entrada do usuário seja acidentalmente usada como caractere de escape.
fonte
¬
- ainda é um personagem de teclado no Reino Unido, mas raramente usado conscientemente :) (canto superior esquerdo entreEsc
eTab
)Use a seguir.
Para que a entrada do usuário pesquise como está, use escape, pois exigirá a substituição a seguir de todos os caracteres especiais (abaixo, abrange todo o SQL Server).
Aqui, aspas simples "'" não são usadas, pois não afetam a cláusula like, pois é uma questão de concatenação de cadeias.
A substituição "-" & "^" & "]" não é necessária, pois estamos escapando de "[".
Em seguida, no SQL Query, deve ser o seguinte. (Na consulta parametrizada, a cadeia pode ser adicionada com padrões após a substituição acima).
Para pesquisar a string exata.
Para pesquisar iniciar com string
Para pesquisar final com string
Para pesquisar conter com sequência
e assim por diante para outras correspondências de padrões. Mas a entrada direta do usuário precisa formatar como mencionado acima.
fonte
Há um problema nisso enquanto:
e:
Ambos funcionam para o SQL Server, mas nem para Oracle.
Parece que não existe uma maneira ISO / IEC 9075 de reconhecer um padrão envolvendo uma cinta esquerda.
fonte