Se si estrae la definizione di operatore LIKE, vedrete che v'è un argomento opzionale chiamato ESCAPE
che è descritto come segue:Perché esiste un argomento ESCAPE dell'operatore LIKE?
è un personaggio che viene messo di fronte a un carattere jolly per indica che il carattere jolly deve essere interpretato come un normale carattere e non come carattere jolly. escape_character è un'espressione di carattere che non ha valore predefinito e deve valutare solo un carattere .
Quindi, quando si scrive una clausola WHERE
come indicato di seguito, dite il motore di SQL Server per trattare il punto esclamativo come un personaggio in fuga (proprio come il personaggio '\'
in C#) per elencare i commenti che includono '30%' sottostringa:
WHERE comment LIKE '%30!%%' ESCAPE '!'
Ora qui diventa confuso per me. È già possibile sfuggire ai caratteri jolly mettendoli all'interno di parentesi quadre. Perché si vorrebbe introdurre l'argomento ESCAPE
? È lì per una ragione, credo.
MODIFICA: Vedo diverse risposte che spiegano come funziona ESCAPE
. So che il codice ESCAPE
viene utilizzato per sfuggire ai caratteri jolly, ma quello che so anche è che puoi sfuggire a questi caratteri jolly utilizzando parentesi quadre. Voglio solo capire cosa ha "metodo ESCAPE" e "metodo parentesi quadre" no.
EDIT 2: Anche se l'esempio di Szymon è totalmente valido, non ritengo che questo sia l'unico motivo per cui è stata introdotta l'ESCAPE. Naturalmente potrei sbagliarmi, ma ho il sospetto che potrebbero esserci motivi basati sulle prestazioni, non lo so per certo. Szymon, è possibile ottenere lo stesso piace segue:
DECLARE @TEST_STRING VARCHAR(100) = 'ddd]eee';
SELECT 'MATCHED! (Szymon)' WHERE @TEST_STRING LIKE '%[abc!]]%' ESCAPE '!';
SELECT 'MATCHED! (Altern)' WHERE @TEST_STRING LIKE '%[abc]%' OR @TEST_STRING LIKE '%]%';
Come nota a margine, non è necessario per sfuggire il carattere parentesi quadra di chiusura.
Come ti cercare una sottolineatura o un segno per cento se non si può dire il motore dovrebbe * non * essere trattato come un jolly? (Btw: questo non è specifico per SQL Server, definito dallo standard SQL) –
@a_horse_with_no_name: '[_]' e '[%]', rispettivamente. – Heinzi
@anario La mia risposta è ciò che stai cercando? – Szymon