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'
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:
È 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'
Ovviamente la soluzione @Lasse è giusta, ma c'è un altro modo per risolvere il tuo problema: l'operatore T-SQL LIKE
definisce 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 '^';
ESCAPE
clausola fa parte dello standard SQL e funzionerà su qualsiasi DBMS, non solo su SQL Server.
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
Questo ha funzionato per me, basta usare la fuga
'%\_%'
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