SQL Server Melepaskan Garis Bawah

339

Bagaimana cara saya keluar dari karakter garis bawah?

Saya menulis sesuatu seperti klausa tempat berikut dan ingin dapat menemukan entri aktual dengan _d di akhir.

Where Username Like '%_d'
GateKiller
sumber

Jawaban:

525

Referensi T-SQL untuk LIKE :

Anda dapat menggunakan karakter yang cocok dengan wildcard sebagai karakter literal. Untuk menggunakan karakter wildcard sebagai karakter literal, lampirkan karakter wildcard dalam tanda kurung. Tabel berikut menunjukkan beberapa contoh penggunaan kata kunci LIKE dan karakter wildcard [].

Untuk kasus Anda:

... LIKE '%[_]d'
Lasse V. Karlsen
sumber
Oh man! ... jika masih tidak berfungsi, pastikan Anda memiliki kolom yang benar.
Jens Frandsen
198

Jelas solusi @Lasse benar, tetapi ada cara lain untuk memecahkan masalah Anda: operator T-SQL LIKEmendefinisikan ESCAPE opsional klausa , yang memungkinkan Anda mendeklarasikan karakter yang akan keluar dari karakter berikutnya ke dalam pola.

Untuk kasus Anda, klausa WHERE berikut ini setara:

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
Gerardo Lima
sumber
43
Untuk melengkapi gambar: ESCAPEklausa adalah bagian dari standar SQL dan akan bekerja pada DBMS apa pun, bukan hanya SQL Server.
a_horse_with_no_name
2

Solusi ini sangat masuk akal. Sayangnya, tidak ada yang bekerja untuk saya seperti yang diharapkan. Alih-alih mencoba repot dengan itu, saya pergi dengan bekerja di sekitar:

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

Ini bekerja untuk saya, gunakan saja pelariannya '%\_%'

Arnór Barkarson
sumber
0

Tak satu pun dari ini bekerja untuk saya di SSIS v18.0, jadi saya akan melakukan sesuatu seperti ini: ... Di

WHERE CHARINDEX('_', thingyoursearching) < 1

mana saya mencoba untuk mengabaikan string dengan garis bawah di dalamnya. Jika Anda ingin menemukan hal-hal yang memiliki garis bawah, balik saja:

WHERE CHARINDEX('_', thingyoursearching) > 0

wolverine87
sumber