Saya menulis kueri SQL di bawah ini dengan LIKE
syarat:
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
Di bagian LIKE
Saya ingin mencari garis bawah %_%
, tetapi saya tahu bahwa data kolom saya tidak memiliki karakter garis bawah.
- Mengapa kueri memberi saya semua catatan dari tabel?
Contoh data:
create table Manager(
id int
,managerid varchar(3)
,managername varchar(50)
);
insert into Manager(id,managerid,managername)values(1,'A1','Mangesh');
insert into Manager(id,managerid,managername)values(2,'A2','Sagar');
insert into Manager(id,managerid,managername)values(3,'C3','Ahmad');
insert into Manager(id,managerid,managername)values(4,'A4','Mango');
insert into Manager(id,managerid,managername)values(5,'B5','Sandesh');
sql
sql-server
ABADI
sumber
sumber
Jawaban:
Ubah
WHERE
kondisi Anda seperti ini:Ini adalah salah satu cara Oracle mendukung karakter melarikan diri. Di sini Anda menentukan karakter melarikan diri dengan
escape
kata kunci. Untuk detailnya lihat tautan ini di Oracle Docs .The
'_'
dan'%'
yang wildcard dalamLIKE
pernyataan beroperasi di SQL.The
_
karakter terlihat untuk kehadiran (ada) satu karakter tunggal. Jika Anda mencari olehcolumnName LIKE '_abc'
, itu akan memberi Anda hasil dengan baris memiliki'aabc'
,'xabc'
,'1abc'
,'#abc'
tapi tidak'abc'
,'abcc'
,'xabcd'
dan sebagainya.The
'%'
karakter digunakan untuk pencocokan 0 atau lebih jumlah karakter. Itu berarti, jika Anda mencari olehcolumnName LIKE '%abc'
, itu akan memberi Anda hasil dengan memiliki'abc'
,'aabc'
,'xyzabc'
dan sebagainya, namun tidak ada'xyzabcd'
,'xabcdd'
dan string lain yang tidak berakhir dengan'abc'
.Dalam kasus Anda, Anda telah mencari
'%_%'
. Ini akan memberikan semua baris dengan kolom itu memiliki satu atau lebih karakter, itu berarti karakter apa pun, sebagai nilainya. Inilah sebabnya mengapa Anda mendapatkan semua baris meskipun tidak ada_
nilai kolom Anda.sumber
like
operator. Solusi saya akan berfungsi di sebagian besar, jika tidak semua, database.Garis bawah adalah karakter pengganti dalam
LIKE
kueri untuk satu karakter arbitrer.Karenanya
LIKE %_%
berarti "berikan saya semua catatan dengan setidaknya satu karakter arbitrer di kolom ini".Anda harus keluar dari karakter wildcard, di sql-server dengan
[]
sekitar:Lihat: LIKE (Transact-SQL)
Demo
sumber
sql-server
tag dalam pertanyaan mereka dan SQLFiddle yang disediakan juga ditetapkan sebagai MS SQL Server 2008.Karena Anda ingin secara khusus mencari karakter wildcard, Anda harus menghindarinya
Ini dilakukan dengan menambahkan
ESCAPE
klausa keLIKE
ekspresi Anda . Karakter yang ditentukan denganESCAPE
klausa akan "membatalkan" karakter wildcard berikut.Anda dapat menggunakan karakter apa pun yang Anda suka (bukan karakter wildcard). Kebanyakan orang menggunakan
\
karena itulah yang juga digunakan oleh banyak bahasa pemrogramanJadi kueri Anda akan menghasilkan:
Tapi Anda juga bisa menggunakan karakter lain:
Berikut adalah contoh SQLFiddle: http://sqlfiddle.com/#!6/63e88/4
sumber
Garis bawah adalah karakter pengganti untuk sesuatu. misalnya 'A_%' akan mencari semua kecocokan yang Mulai dengan 'A' dan memiliki minimal 1 karakter tambahan setelah itu
sumber
Anda dapat menulis kueri seperti di bawah ini:
itu akan menyelesaikan masalahmu.
sumber
Jika orang-orang menelusuri cara melakukannya di BigQuery:
Garis bawah "_" cocok dengan satu karakter atau byte.
Anda dapat keluar dari "\", "_", atau "%" menggunakan dua garis miring terbalik. Sebagai contoh, "\%". Jika Anda menggunakan string mentah, hanya diperlukan satu garis miring terbalik. Misalnya, r "\%".
Sumber: https://cloud.google.com/bigquery/docs/reference/standard-sql/operators
sumber