Saya mencoba memfilter item dengan prosedur tersimpan menggunakan like. Kolom adalah varchar (15). Item yang saya coba filter memiliki tanda kurung kotak dalam namanya.
Sebagai contoh: WC[R]S123456
.
Jika saya melakukan LIKE 'WC[R]S123456'
itu tidak akan mengembalikan apa pun.
Saya menemukan beberapa informasi tentang menggunakan ESCAPE
kata kunci dengan LIKE
tetapi saya tidak mengerti bagaimana menggunakannya untuk memperlakukan tanda kurung sebagai string biasa.
LIKE '[fz]oo'
akan cocok dengan 'foo' dan 'zoo'.LIKE 'WC\[R]S123456' ESCAPE '\'
karena lebih mudah dibaca untuk pemeliharaan.Katakanlah Anda ingin mencocokkan literal
its[brac]et
.Anda tidak perlu melarikan diri
]
karena memiliki makna khusus hanya ketika dipasangkan dengannya[
.Oleh karena itu melarikan diri
[
sudah cukup untuk menyelesaikan masalah. Anda dapat melarikan diri[
dengan menggantinya dengan[[]
.sumber
[[]
memang terlihat aneh, tetapi masuk akal ketika Anda melihatnya dari perspektif parser. Parser memiliki aturan khusus untuk bagaimana menangani karakter di antaranya[ ]
. Jadi, teksits[brac]et
berarti: "Temukan string berurutan berikut:,its
(terapkan aturan untuk tanda kurung siku:)brac
,et
" . Di sisi lain,its[[]brac]et
berarti: "Temukan string berurutan berikut:,its
(terapkan aturan untuk tanda kurung:)[
,brac]et
" .Saya perlu mengecualikan nama yang dimulai dengan garis bawah dari kueri, jadi saya berakhir dengan ini:
sumber
Inilah yang sebenarnya saya gunakan:
sumber
Kata kunci ESCAPE digunakan jika Anda perlu mencari karakter khusus seperti% dan _, yang biasanya kartu liar. Jika Anda menentukan ESCAPE, SQL akan mencari karakter% dan _ secara harfiah.
Inilah artikel bagus dengan beberapa contoh lagi
sumber
Jika Anda perlu keluar dari karakter khusus seperti '_' (garis bawah), seperti dalam kasus saya, dan Anda tidak mau / tidak dapat mendefinisikan klausa ESCAPE, Anda mungkin ingin menyertakan karakter khusus dengan tanda kurung siku '[[ ' dan '] ' .
Ini menjelaskan arti dari string "aneh" '[[]' - itu hanya merangkul karakter '[' dengan tanda kurung siku, secara efektif menghindarinya.
Kasus penggunaan saya adalah untuk menentukan nama prosedur yang tersimpan dengan garis bawah di dalamnya sebagai kriteria filter untuk Profiler. Jadi saya telah meletakkan string '% name [_] dari [_] a [_] tersimpan [_] prosedur%' dalam bidang LIKE TextData dan itu memberi saya hasil penelusuran yang ingin saya capai.
Berikut ini adalah contoh yang baik dari dokumentasi: LIKE (Transact-SQL) - Menggunakan Karakter Wildcard Sebagai Literal
sumber
Menurut dokumentasi :
Anda perlu melarikan diri dari tiga karakter ini
%_[
:sumber
Alih-alih '\' atau karakter lain di keyboard, Anda juga dapat menggunakan karakter khusus yang tidak ada di keyboard. Tergantung pada kasus penggunaan Anda, ini mungkin diperlukan, jika Anda tidak ingin input pengguna secara tidak sengaja digunakan sebagai karakter pelarian.
sumber
¬
- itu masih karakter keyboard di Inggris tetapi jarang digunakan dengan sengaja :) (kiri atas antaraEsc
danTab
)Gunakan Mengikuti.
Untuk input pengguna untuk mencari apa adanya, gunakan escape, karena akan membutuhkan penggantian berikut untuk semua karakter khusus (di bawah ini mencakup semua SQL Server).
Di sini kutipan tunggal "'" tidak diambil karena tidak mempengaruhi klausa seperti karena ini adalah masalah penggabungan string.
"-" & "^" & "]" ganti tidak diperlukan karena kami melarikan diri "[".
Kemudian, dalam SQL Query seharusnya sebagai berikut. (Dalam kueri parameterised, string dapat ditambahkan dengan pola setelah penggantian di atas).
Untuk mencari string yang tepat.
Untuk mencari mulai dengan string
Untuk mencari akhir dengan string
Untuk mencari mengandung dengan string
dan seterusnya untuk pencocokan pola lainnya. Tetapi input pengguna langsung perlu format seperti yang disebutkan di atas.
sumber
Ada masalah saat itu:
dan:
Keduanya bekerja untuk SQL Server tetapi tidak untuk Oracle.
Tampaknya tidak ada cara ISO / IEC 9075 untuk mengenali pola yang melibatkan penjepit kiri.
sumber