SQL Server Fuga da un carattere di sottolineatura


339

Come sfuggire al carattere di sottolineatura?

Sto scrivendo qualcosa come la seguente clausola where e voglio essere in grado di trovare voci effettive con _d alla fine.

Where Username Like '%_d'

Risposte:


525

Riferimento T-SQL per LIKE :

È possibile utilizzare il modello jolly che abbina caratteri come caratteri letterali. Per utilizzare un carattere jolly come carattere letterale, racchiudere il carattere jolly tra parentesi. La tabella seguente mostra alcuni esempi di utilizzo della parola chiave LIKE e dei caratteri jolly [].

Per il tuo caso:

... LIKE '%[_]d'

Oddio! ... se continua a non funzionare, assicurati di avere la colonna corretta.
Jens Frandsen,

198

Ovviamente la soluzione @Lasse è giusta, ma c'è un altro modo per risolvere il tuo problema: l'operatore T-SQL LIKEdefinisce la clausola ESCAPE opzionale , che ti consente di dichiarare un carattere che sfuggirà al carattere successivo nel modello.

Nel tuo caso, le seguenti clausole WHERE sono equivalenti:

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';

43
Per completare l'immagine: la ESCAPEclausola fa parte dello standard SQL e funzionerà su qualsiasi DBMS, non solo su SQL Server.
a_horse_with_no_name il

2

Queste soluzioni hanno perfettamente senso. Sfortunatamente, nessuno dei due ha funzionato per me come previsto. Invece di provare a seccarlo, sono andato con un lavoro in giro:

select * from information_schema.columns 
where replace(table_name,'_','!') not like '%!%'
order by table_name


0

Nessuno di questi ha funzionato per me in SSIS v18.0, quindi mi piacerebbe fare qualcosa del genere:

WHERE CHARINDEX('_', thingyoursearching) < 1

.. dove sto cercando di ignorare le stringhe con un carattere di sottolineatura. Se vuoi trovare elementi che hanno un carattere di sottolineatura, basta capovolgerli:

WHERE CHARINDEX('_', thingyoursearching) > 0

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.