SQL Serverで特殊文字を含む行を検索する

今日のプログラミングの問題をトラブルシューティングする際に、特別な構文を使わずに、%や_のような特殊文字を含む文字列列に対してLIKE検索を使用することはできないことに気付きました。問題の解明にはほんの数分しかかかりませんでしたが、構文を覚えておけばそれはいつでも簡単です。

そう、はい、この投稿は私の利益のためだけです。うまくいけば、他の人にも役立つでしょう。

たとえば、 “100%”というテキストが含まれているフィールドを検索したい場合、このクエリをまとめるとします

SELECT * FROM tablename WHERE fieldname LIKE ‘%100 %%’

あなたが望むものの代わりに、 “100”を含むすべての行と “100%”を含む行を取得します。

ここでの問題は、SQL Serverでは、パーセント記号、アンダースコア、および角括弧が特殊文字として使用されることです。 LIKEクエリでプレーン文字としてエスケープせずに単純に使用することはできません。

スクエアブラケットエスケープ

角かっこで%または_を囲むと、内部の文字が通常の文字であることをSQL Serverに伝えることができます。

SELECT * FROM tablename where fieldname LIKE ‘%100 [%]%’

T-SQLのESCAPE構文

あるいは、ESCAPE演算子をクエリに追加し、エスケープする値の前に\文字を追加することもできます。

SELECT * FROM tablename whereフィールド名LIKE ‘%100 \ %%’ ESCAPE ‘\’

ESCAPEの ‘\’部分はSQLエンジンに、\の後の文字をワイルドカードではなくリテラル文字として解釈するように指示します。

個人的には、2番目の方法は扱いが簡単で、それを使って角括弧もエスケープすることができます。

素晴らしい投稿のおかげで!非常に便利…

この書き込みは私にとって非常に有益でした。それを書いていただきありがとうございます。がんばり続ける。

はい、しかし、あなたはどのように ‘

私は多くを試して、この答えを見つけることができません。

Weehaは、SQLの「不正な」文字のいずれかを検索するために、instrとchr関数の組み合わせをASCIIコード表と組み合わせて使用​​します。たとえば、 “‘”のASCIIコードは39なので、instr(、char(39))> 1は “‘”を含むすべてのインスタンスを返します。

私の前の投稿では、パーサーが私のテキストのいくつかを取り除いた。最後のステートメントはinstr(string_being_searched、char(39))> 1が “‘”を含むstring_being_searchedのすべてのインスタンスを返します。

情報の良い部分..それは私が多くの時間内に役立ちます

クレイジー便利です。ありがとう。

どうもありがとう! ESCAPE修飾子は、.NETフレームワークのデータテーブル選択文では機能しません(例:doesnt work; Dim DT As New DataTable; DT.Columns.Add( “test”); Dim DR As DataRow = DT.Rows.Add; DR Debug.Print(find.Length); Doesn ‘);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ” Dim find()As DataRow = DT.Select( “test = ‘brett [‘] s test ‘”); Dim Search()As DataRow = DT.Select( “test =’ブレットのテスト ”)

角かっこは、文字列に%…が含まれているLIKEを使用して、ネットフレームワークのdatatable selectステートメントで機能します;; “名前をLIKE ‘%”&replace(someString、 “%”、 “[%]”)& “%'”)

プラスチック製の薬瓶は、実用的な理由から、オレンジ色または茶色が一般的であり、光は多くの種類の薬物を劣化させる。