Saat saya menulis halaman hari ini, saya juga sangat tertekan. Ada catatan di tabel, tetapi saya tidak dapat menemukannya di ASP. Ternyata itu disebabkan oleh perbedaan karakter wildcard dalam pernyataan kueri akses dan SQL .
Perbandingan karakter wildcard di ACCESS dan karakter wildcard di SQL SERVER
==================== =
Karakter wildcard untuk perpustakaan ACCESS adalah:
*cocok dengan sejumlah karakter apa pun
?cocok dengan karakter satu huruf apa pun
Karakter wildcard di SQL Server adalah:
% cocok dengan sejumlah karakter
_ cocok dengan satu karakter
teks
Ketika saya menulis halaman hari ini, saya juga sangat tertekan. Ada catatan di tabel, tetapi saya tidak dapat menemukannya di ASP. Pernyataan teoritis SQL adalah sebagai berikut:
Pilih * DARI t_food Dimana t_food.name seperti '*apple*'
Mencari di GOOGLE, saya menemukan bahwa query fuzzy di ASP harus ditulis seperti ini:
Pilih * DARI t_food Di mana t_food.name seperti '%%apple%%'
Harus %, dan harus ada dua. Mohon perhatiannya.
++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++
Masalah wildcard pernyataan kueri SQL
Saat menggunakan pernyataan SQL untuk mengkueri data di Access, karakter wildcard * digunakan untuk kueri. Pernyataannya adalah sebagai berikut:
Pilih * dari normal di mana nama buku seperti '*h*'
Mencobanya dalam tampilan SQL Access tanpa masalah, semuanya berfungsi dengan baik. Jadi saya menulis pernyataan SQL ke dalam program C#, tetapi segera setelah pernyataan kueri tercapai, terjadi kesalahan saya bingung. Jadi saya mencari file bantuan Access dan menemukan bantuan berikut:
//////////////////////////////////////////////////// /// //////////
Membandingkan ekspresi string dengan pola dalam ekspresi SQL.
tata bahasa
ekspresi seperti pola
Sintaks operator Like terdiri dari bagian-bagian berikut:
Deskripsi sebagian
ekspresi Ekspresi SQL yang digunakan dalam klausa Where.
Pola literal string dibandingkan dengan ekspresi.
menjelaskan
Anda dapat menggunakan operator Suka untuk menemukan nilai bidang yang cocok dengan pola tertentu. Untuk pola, Anda dapat menentukan nilai lengkap (misalnya, Like Smith), atau Anda dapat menggunakan wildcard untuk menemukan rentang nilai (misalnya, Like Sm*).
Dalam ekspresi, Anda dapat menggunakan operator Suka untuk membandingkan nilai bidang dengan string. Misalnya, jika Anda memasukkan Like C* dalam kueri SQL, kueri tersebut akan mengembalikan semua nilai bidang yang dimulai dengan huruf C. Dalam kueri parameter, Anda bisa meminta pengguna mengetikkan pola yang akan dicari.
Contoh berikut mengembalikan data yang dimulai dengan huruf P dan diikuti oleh huruf apa pun dari A hingga F dan tiga angka:
Seperti P[AF]###
Tabel berikut menunjukkan cara menguji pola ekspresi yang berbeda melalui Suka.
jenis kecocokan
pencocokan pola
(Kembali Benar) Tidak ada kecocokan
(Kembali Salah)
Beberapa karakter a*a aa, aBa, aBBBa aBC
*ab* abc, AABB, Xab aZb, bac
Karakter khusus a
aa*a aaa
Beberapa karakter ab* abcdefg, abc cab, aab
Karakter tunggal a?a aaa, a3a, aBa aBBBa
Nomor tunggal a#a a0a, a1a, a2a aaa, a10a
Rentang karakter [az] f, p, j 2, &
Di luar jangkauan [!az] 9, &, % b, a
Nilai non-numerik [!0-9] A, a, &, ~ 0, 1, 9
Nilai gabungan a[!bm]# An9, az0, a99 abc, aj0
Alamat referensi: http://office.microsoft.com/zh-cn/assistance/HP010322532052.aspx
//////////////////////////////////////////////////// /// /////////
Bantuannya bilang begitu, dan tidak ada masalah. Itu membuatku semakin bingung. Kemudian, saya bertanya kepada seorang rekan dan berkata: Pernyataan SQL Anda salah. Karakter wildcard seharusnya %, bukan *. Namun bantuannya mengatakan *, dan semuanya berfungsi dengan baik saat saya mengujinya di Access. Rekan saya tidak bisa menjelaskan alasannya, jadi mereka terus mencari jawaban atas permintaan bantuan. Informasi berikut ditemukan di file bantuan lain:
//////////////////////////////////////////////////// /// /////////
Metode pencocokan pola bawaan menyediakan alat umum untuk perbandingan string. Tabel berikut memperlihatkan karakter wildcard yang dapat digunakan dengan operator Suka, serta angka dan string yang cocok.
Karakter dalam pola Cocok dalam ekspresi
? atau _ (garis bawah) karakter apa pun
* atau % nol atau lebih karakter
# Nomor tunggal apa saja (0-9)
[charlist] Setiap karakter dalam charlist.
[!charlist] Karakter apa pun yang tidak ada dalam charlist.
Anda dapat menggunakan sekumpulan satu atau lebih karakter (charlist) yang diapit tanda kurung ([]) untuk mencocokkan karakter tunggal apa pun dalam ekspresi, dan charlist dapat berisi sebagian besar karakter dalam rangkaian karakter ANSI, termasuk angka. Karakter tertentu seperti tanda kurung kiri ([), tanda tanya (?), tanda angka (#), dan tanda bintang (*) dapat dicocokkan langsung dengan simbol itu sendiri dengan mengapitnya dalam tanda kurung siku. Tanda kurung tutup tidak dapat digunakan di dalam grup untuk mencocokkan dirinya sendiri, namun dapat digunakan sebagai karakter tunggal di luar grup.
Selain daftar karakter sederhana yang diapit tanda kurung siku, charlist dapat memiliki batas rentang atas dan bawah yang dipisahkan dengan menggunakan tanda hubung (-). Misalnya, saat menggunakan [AZ] dalam pola, kecocokan dicapai jika karakter terkait dalam ekspresi berisi karakter huruf besar apa pun dalam rentang A hingga Z. Anda dapat mengapit beberapa rentang dalam tanda kurung siku tanpa membatasi rentang tersebut. Misalnya, [a-zA-Z0-9] cocok dengan karakter alfanumerik apa pun.
Harap perhatikan bahwa karakter wildcard ANSI SQL (%) dan (_) hanya valid di Microsoft® Jet versi 4.X dan Penyedia Microsoft OLE DB untuk Jet. Jika digunakan di Microsoft Access atau DAO, mereka diperlakukan sebagai teks.
Aturan penting lainnya untuk pencocokan pola adalah sebagai berikut:
Penggunaan tanda seru (!) di awal charlist akan menunjukkan bahwa kecocokan akan terjadi jika ada karakter di luar charlist yang muncul dalam ekspresi. Jika digunakan di luar tanda kurung siku, tanda seru akan cocok dengan dirinya sendiri.
Tanda hubung (-) dapat digunakan di awal (setelah tanda seru) atau di akhir charlist untuk mencocokkan dirinya sendiri. Di posisi lain, tanda hubung mengidentifikasi serangkaian karakter ANSI.
Ketika rentang karakter ditentukan, karakter harus muncul dalam urutan menaik (AZ atau 0-100). [AZ] adalah mode yang valid, [ZA] adalah mode yang tidak valid.
Urutan karakter [ ] diabaikan; ini diperlakukan sebagai karakter dengan panjang nol ( ).
Alamat referensi: http://office.microsoft.com/zh-cn/assistance/HP010322842052.aspx
//////////////////////////////////////////////////// /// ///////////////
Sampai disini alasannya akhirnya ditemukan. Karena saya menggunakan wildcard * di Access, semuanya berfungsi dengan baik, tetapi jika saya mengubahnya ke %, tidak akan berhasil. Di C#, hanya % wildcard yang didukung, dan menggantinya dengan * akan menyebabkan kesalahan! Apakah masalah ini dianggap sebagai masalah kompatibilitas?
Karakter pengganti:
Contoh deskripsi karakter pengganti
% String apa pun yang berisi nol atau lebih karakter. WHERE title LIKE '%computer%' akan menemukan semua judul buku yang mengandung kata computer di manapun dalam judulnya.
_ (garis bawah) Setiap karakter tunggal. WHERE au_fname LIKE '_ean' akan menemukan semua nama 4 huruf yang diakhiri dengan ean (Dean, Sean, dll.).
[ ] Menentukan karakter tunggal apa pun dalam rentang ([af]) atau kumpulan ([abcdef]). Dimana au_lname LIKE '[CP]arsen' akan menemukan nama belakang penulis yang diakhiri dengan arsen dan dimulai dengan karakter tunggal antara C dan P, misalnya Carsen, Larsen, Karsen, dll.
[^] Setiap karakter tunggal yang tidak termasuk dalam rentang yang ditentukan ([af]) atau himpunan ([abcdef]). Dimana au_lname LIKE 'de[^l]%' akan menemukan semua nama belakang penulis yang dimulai dengan de dan tidak diikuti oleh l.
Gunakan wildcard sebagai literal
Anda dapat menggunakan string pencocokan pola wildcard sebagai string literal dengan menyertakan karakter wildcard dalam tanda kurung. Tabel berikut menunjukkan contoh penggunaan kata kunci LIKE dan karakter wildcard [ ].
Arti simbol
SEPERTI '5[%]' 5%
SEPERTI '[_]n' _n
SEPERTI '[a-cdf]' a, b, c, d atau f
SEPERTI '[-acdf]' -, a, c, d atau f
MENYUKAI '[ [ ]' [
MENYUKAI ']' ]
SEPERTI 'abc[_]d%' abc_d dan abc_de
SEPERTI 'abc[def]' abcd, abce dan abcf
Pencocokan pola menggunakan klausa ESCAPE
Mencari string yang berisi satu atau lebih karakter wildcard khusus. Misalnya tabel diskon di database pelanggan mungkin menyimpan nilai diskon dengan tanda persen (%). Untuk mencari tanda persen sebagai karakter dan bukan karakter wildcard, Anda harus memberikan kata kunci ESCAPE dan karakter escape. Misalnya, database sampel berisi kolom bernama komentar yang berisi 30% teks. Untuk mencari baris mana pun yang berisi 30% string di mana pun di kolom komentar, tentukan klausa Where yang terdiri dari komentar WHERE LIKE '%30!%%' ESCAPE '!'. Jika Anda tidak menentukan ESCAPE dan karakter escape, SQL Server mengembalikan semua baris yang berisi string 30.
Contoh berikut menunjukkan cara mencari string diskon 50% ketika 100 salinan atau lebih dibeli di kolom catatan pada tabel judul di database pubs:
Pilih catatan DARI judul Dimana catatan SEPERTI 'Diskon 50%% ketika 100 eksemplar atau lebih dibeli' ESCAPE '%'