SQL Serverがアンダースコアをエスケープする


338

下線文字をエスケープするにはどうすればよいですか?

次のwhere句のようなものを書いていて、末尾に_dがある実際のエントリを見つけられるようにしたいと思っています。

Where Username Like '%_d'

回答:


523

LIKEのT-SQLリファレンス

ワイルドカードパターンマッチング文字をリテラル文字として使用できます。ワイルドカード文字をリテラル文字として使用するには、ワイルドカード文字を角かっこで囲みます。次の表は、LIKEキーワードと[]ワイルドカード文字の使用例をいくつか示しています。

あなたの場合:

... LIKE '%[_]d'

ちょっと、あなた!...それでも機能しない場合は、列が正しいことを確認してください。
Jens Frandsen、

198

明らかに@Lasseソリューションは正しいですが、問題を解決する別の方法があります。T-SQL演算子LIKEはオプションのESCAPE句を定義します。これにより、次の文字をパターンにエスケープする文字を宣言できます。

あなたの場合、次のWHERE句は同等です。

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

42
全体像を説明すると、このESCAPE句はSQL標準の一部であり、SQL Serverだけでなく、どのDBMSでも機能します。
a_horse_with_no_name 2015年

2

これらのソリューションは完全に理にかなっています。残念ながら、どちらも期待どおりに機能しませんでした。面倒ではなく、次の回避策を講じました。

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


0

これらはSSIS v18.0では機能しなかったので、次のような

WHERE CHARINDEX('_', thingyoursearching) < 1

ことをします。アンダースコアのあるものを見つけたい場合は、裏返してください:

WHERE CHARINDEX('_', thingyoursearching) > 0

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.