Penggunaannya mirip dengan permintaan 1s 8.2. Mirip dengan kondisi kueri

Terlepas dari semua kekurangannya, pencarian bidang teks masih menjadi salah satu yang paling populer. Kita dapat menemukan tipe data string di mana saja - nama, nomor rekening, alamat, serta informasi lainnya dapat disimpan dalam format ini. Dalam kueri dalam bahasa 1C bawaan, untuk kenyamanan pengembang, operator khusus "LIKE" digunakan. Ini adalah salah satu perintah yang paling banyak digunakan, jadi tanpa pengetahuan menyeluruh tentang sintaksis dan kemampuannya, akan sulit bagi seorang programmer untuk bekerja.

Menggunakan operator LIKE

Sebelum menggunakan operator apa pun dalam praktiknya, Anda perlu memahami dengan jelas tujuan, tempat penerapan, dan sintaksisnya. Tujuan penggunaan "LIKE" dalam permintaan 1C adalah untuk memeriksa kepuasan kondisi yang disajikan sebagai template. Nilai yang dikembalikan adalah tipe Boolean - benar atau salah - yang menunjukkan apakah kondisi yang ditentukan benar. Operator LIKE dapat digunakan di beberapa tempat dalam query:

  • Di blok kondisi, ditunjukkan dengan kata kunci “WHERE”;
  • Dalam desain Pilihan Kapan Kalau Tidak Berakhir;
  • Langsung di kolom seleksi, sebagai hasil perbandingan lapangan.

Sintaks verifikasi selalu sama dan terdiri dari 3 link. Di sebelah kiri adalah nilai teks yang sedang diperiksa, lalu operator “LIKE” itu sendiri, dan di sebelah kanan adalah template yang sedang diperiksa. Untuk membuat template dengan cepat dan mudah, terdapat simbol khusus yang mempermudah pengembangan:

  1. “%” adalah urutan karakter apa pun yang panjangnya berubah-ubah. Digunakan untuk mencari kata atau angka individual dalam sebuah string;
  2. “_” – karakter tunggal apa pun. Dimaksudkan untuk menunjukkan kehadiran satu karakter;
  3. “[...]” adalah urutan karakter untuk dibandingkan dengan karakter dalam string. Dengan bantuan pola seperti itu, kecocokan dengan salah satu karakter yang tercantum dalam tanda kurung diperiksa. Anda juga dapat menentukan rentang angka atau huruf ([a-g], );
  4. “[^...]” adalah pola kebalikan dari pola sebelumnya. Perbedaan antara karakter yang ditentukan dalam baris dan yang tercantum dalam tanda kurung dicentang.

Untuk lebih memahami dan memahami prinsip pembuatan template yang benar, mari kita lihat beberapa contoh yang sering kita jumpai dalam kehidupan developer. Yang pertama adalah ketika kita perlu memilih dari direktori nomenklatur semua item yang namanya muncul kata “CUTTER”. Dalam hal ini, kita perlu menggunakan LIKE dalam kondisi kueri:

PILIH Nomenklatur.Nama SEBAGAI Nama DARI Direktori.Nomenklatur SEBAGAI Nomenklatur DI MANA Nomenklatur.Nama SAMA dengan "% CUTTER%"

Jika kita menghapus kedua simbol “%”, kueri akan menampilkan produk yang namanya benar-benar cocok dengan yang ditentukan dalam tanda kutip. Jika kita meninggalkan template “CUTTER%” atau “% CUTTER”, maka hasilnya akan berupa daftar item yang masing-masing berakhir atau dimulai dengan kombinasi karakter tertentu.


Mari kita lihat masalah yang dapat membingungkan programmer pemula yang tidak mengetahui sintaks query. Katakanlah Anda perlu menemukan semua item yang memiliki simbol “%” di namanya. Khusus untuk kasus ketika Anda perlu mencari karakter yang dicadangkan, ada operator “karakter khusus”. #,\,/,~ dan karakter lainnya dapat digunakan sebagai karakter khusus, setelah itu karakter yang dicadangkan hanya akan menunjukkan sebuah tanda.

PILIH Nomenklatur.Nama SEBAGAI Nama DARI Direktori.Nomenklatur SEBAGAI Nomenklatur DIMANA Nomenklatur.Nama SERUPA dengan "%#%" KARAKTER KHUSUS "#"

Jika Anda perlu menggunakan parameter dalam pencarian, maka variabel dalam query dengan parameter SIMILAR digunakan menggunakan penambahan. Ingatlah bahwa parameternya harus berupa tipe string atau Anda perlu mengonversinya menjadi string dalam permintaan. Ini adalah operasi yang agak rumit dan lebih baik untuk mengecualikannya terlebih dahulu.

PILIH Nomenklatur.Nama SEBAGAI Nama DARI Direktori.Nomenklatur SEBAGAI Nomenklatur DI MANA Nomenklatur.Nama SERUPA dengan "%" + &nama + "%"

Fungsi SIMILAR berlaku di semua versi platform, mulai dari 8, dan karena penerapannya, pengembang 1C tidak ingin mengubahnya. Tentu saja, pencarian teks selalu bergantung pada keakuratan nama yang dimasukkan, namun tetap menjadi salah satu yang paling umum. Berkaitan dengan hal tersebut, pengembang 1C profesional perlu mempelajari penggunaan SIMILAR dengan segala nuansanya.

Operator SIMILAR dalam kueri memeriksa nilai string dari tabel untuk kesamaan dengan suatu pola.
Cara penggunaannya sebagai berikut: string yang akan diperiksa ditempatkan di sebelah kiri operator ini, dan polanya di sebelah kanan.

Setelah diperiksa, ia mengembalikan Benar atau Salah, dan digunakan secara aktif dalam kondisi.
Karakter layanan berikut digunakan untuk membuat templat:

  • % (persentase) - urutan yang berisi sejumlah karakter arbitrer
  • _ (garis bawah) - satu karakter arbitrer
  • […] (satu atau lebih karakter dalam tanda kurung siku) - setiap karakter yang tercantum di dalam tanda kurung siku
    Selain itu, selain berbagai simbol, Anda dapat menggunakan rentang, misalnya a-z(A-z), yang berarti adanya simbol sembarang yang termasuk dalam rentang, termasuk ujung rentang.
  • [^...] (dalam tanda kurung siku, tanda negasi diikuti oleh satu atau lebih karakter) - karakter apa pun selain yang tercantum setelah tanda negasi

Simbol lainnya digunakan untuk tujuan yang dimaksudkan.
Jika salah satu karakter layanan di atas perlu ditransmisikan sebagai simbol, maka harus didahului dengan<Спецсимвол>. Saya sendiri<Спецсимвол>(karakter apa pun yang sesuai) didefinisikan dalam pernyataan yang sama setelah kata kunci KARAKTER KHUSUS.
Misalnya, pola “%ABV[abvg]\_abv%” KARAKTER KHUSUS “\” berarti substring yang terdiri dari rangkaian karakter:
huruf A; huruf B; huruf B; satu angka; salah satu huruf a, b, c atau d; menggarisbawahi; huruf a; huruf b; huruf v.
Selain itu, urutan ini dapat didahului oleh serangkaian karakter yang berubah-ubah.

Prosedur Pilih AgreementContainingInNameText(mText)
//Dalam request kita akan menggunakan template seperti "%" + mText + "%" Request = New Request; Query.SetParameter("Nama", "%" + Teks + "%"); Request.Text = "PILIH | Perjanjian. Tautan, | Perjanjian. Pemilik | DARI | Direktori. Kontrak Pihak Lawan SEBAGAI Perjanjian | | DI MANA | Perjanjian. Nama SAMA & Nama"; Hasil = Kueri.Jalankan(); Pilihan = Hasil.Pilih(); Report("Perjanjian yang berisi nama: " + mText + " memiliki Pihak Rekanan berikut"); While Selection.Next() Cycle Report("Counterparty: " + Selection.Owner + "; Perjanjian: " + Selection. Link EndIf; EndProcedure

Mari kita lihat tujuan dan penggunaan operator kondisional SEPERTI(eng. SEPERTI) dalam bahasa kueri 1C dalam contoh.

Lompat Cepat

Tujuan

Periksa apakah nilai string dalam permintaan cocok dengan pola yang ditentukan - mengembalikan nilai Boolean (TRUE atau FALSE).

  • Cek ini tidak bergantung pada kasus.
  • Kueri menggunakan indeks tabel—tidak terkait dengan indeks penelusuran teks lengkap.
  • Mungkin memerlukan waktu lama untuk menyelesaikannya dengan meja besar.
  • String yang panjangnya tidak terbatas harus dikonversi menggunakan fungsi SUBSTRING

Tempat penggunaan

  • Dalam istilah operator WHERE
  • Dalam kondisi desain PILIHAN KAPAN<>LALU "" LAIN "" AKHIR
  • Di kolom pilihan (misalnya: Nama LIKE &ParameterMirip dengan StringSuitable)

Deskripsi sintaks operator LIKE

Parameter operator harus berupa string: dapat ditentukan sebagai konstanta, atau diteruskan sebagai parameter permintaan.

Literal (masker) yang tercantum di bawah ini dapat digunakan secara bersamaan atau terpisah.

Spesifikasi string yang tepat

PILIH 10 yang pertama
Kunci.Nama
DARI
Direktori.Kunci SEBAGAI Kunci
DI MANA
Kunci.Nama SERUPA dengan "1" // Setara dengan Kunci.Nama ="1"

Hasil:

% adalah arti literal sejumlah karakter apa pun

PILIH 10 yang pertama
Kunci.Nama
DARI
Direktori.Kunci SEBAGAI Kunci
DI MANA
Kunci.Nama SEPERTI "%"

Hasil: 10 item apa saja

_ (garis bawah): pencocokan literal dengan satu karakter

Contoh #1:

PILIH 10 yang pertama
Kunci.Nama
DARI
Direktori.Kunci SEBAGAI Kunci
DI MANA
Kunci.Nama SEPERTI "_"

Contoh #2: dimulai dengan karakter apa saja, diikuti dengan “1”, lalu karakter apa saja

PILIH 10 yang pertama
Kunci.Nama
DARI
Direktori.Kunci SEBAGAI Kunci
DI MANA
Kunci.Nama SAMA dengan "_1%"

Hasil:

(satu atau lebih karakter dalam tanda kurung siku)

  • Setiap literal yang cocok dengan salah satu karakter digunakan sebagai OR.
    Dapat diterima untuk menentukan rentang, misalnya a-z,0-5, yang berarti karakter arbitrer dari rentang yang ditentukan

Contoh

PILIH 10 yang pertama
Kunci.Nama
DARI
Direktori.Kunci SEBAGAI Kunci
DI MANA
Kunci.Nama SAMA dengan "[l]%"

Hasil: 10 dimulai dengan "l" atau "z"

Contoh: dimulai dengan 5,6,7

PILIH 10 yang pertama
Kunci.Nama
DARI
Direktori.Kunci SEBAGAI Kunci
DI MANA
Kunci.Nama SEPERTI "%"

Hasil:

[^] (dalam tanda kurung siku terdapat tanda escape ^ diikuti oleh satu karakter atau lebih)

Setara dengan karakter apa pun (_) kecuali yang ditentukan ()

Contoh

PILIH 10 yang pertama
Kunci.Nama
DARI
Direktori.Kunci SEBAGAI Kunci
DI MANA
Kunci.Nama SERUPA dengan "8.[^012]%"//tidak menyertakan 8.0,8.1,8.2

Hasil: semua dimulai dengan "8." kecuali yang disebutkan

KARAKTER KHUSUS - perintah untuk menentukan karakter yang terdaftar di atas dalam permintaan

Sebagai simbol layanan, diperbolehkan menggunakan setidaknya: #,~,/,\

Contoh:

PILIH 10 yang pertama
Kunci.Nama
DARI
Direktori.Kunci SEBAGAI Kunci
DI MANA
Kunci.Nama SEPERTI "#_" KARAKTER KHUSUS "#"

Hasil:

Penerapan dalam platform

Parameter yang salah SEPERTI<>

  • Parameter tipe non-string diteruskan: misalnya, angka 1, bukan string “1”
  • Bidang tipe non-string dibandingkan dengan topeng yang valid (misalnya, tautan) atau saat menghubungkan, nilainya tidak dicentang untuk IsNUL

Perhatikan teks kesalahan tempat pertanyaan ditampilkan:

Kunci.Nama SERUPA<>&L

Operator MENYUKAI memungkinkan Anda membandingkan data tipe string dalam kueri yang terletak di sebelah kiri operator dengan data tipe string yang terletak di sebelah kanan operator. Hasil perbandingan bernilai Benar atau Salah, sehingga perbandingan tersebut dapat diterapkan sebagai syarat.

Untuk operator MENYUKAI Ada karakter layanan khusus yang tidak dianggap sebagai string:

  • Simbol persen "%": menunjukkan keberadaan sejumlah karakter arbitrer dalam sebuah string
  • "[...]" satu atau lebih karakter dalam tanda kurung siku: menunjukkan keberadaan salah satu (tunggal) karakter yang terdaftar. Juga, serangkaian karakter dapat ditentukan (misalnya)
  • Garis bawah "_": menunjukkan adanya karakter sembarang
  • Karakter negasi "[^...]": menunjukkan keberadaan karakter tunggal apa pun selain yang ditentukan dalam tanda kurung siku
Jika Anda perlu menentukan salah satu karakter khusus di atas untuk perbandingan, Anda harus menggunakan kata kunci "SIMBOL KHUSUS"

Fitur penggunaan dengan berbagai DBMS

IBM DB2"Hanya parameter yang dapat ditempatkan di sebelah kanan operator SIMILAR. Satu-satunya karakter wildcard adalah "_" (garis bawah berarti karakter apa pun) dan "%" (persentase berarti urutan karakter apa pun).
Dalam hal menggunakan DBMS " PostgreSQL" atau " Basis Data Oracle"karakter khusus "tanda kurung siku [...]" hanya diterima jika ditentukan dalam teks permintaan, dan TIDAK diteruskan sebagai parameter ke permintaan.

Jadi, dalam database file, karakter khusus akan selalu dirasakan dengan cara yang sama, dan berbeda tergantung pada DBMS yang digunakan dalam versi client-server.

Contoh: pilih produk yang mengandung simbol "%" pada namanya

PILIH | Ref.Link |DARI | Direktori Nomenklatur BAGAIMANA Ref | Ref.Nama SEPERTI "%\%" KARAKTER KHUSUS "\"

Contoh: pilih produk yang namanya diawali dengan kata "Tank"

PILIH | Ref.Link |DARI | Direktori Nomenklatur BAGAIMANA Ref | Ref.Nama SAMA dengan "Bak%"

Contoh: pilih produk yang namanya diakhiri dengan angka

PILIH | Ref.Link |DARI | Direktori Nomenklatur BAGAIMANA Ref | Ref.Nama SAMA dengan "%"

Terkadang situasi muncul ketika di 1C 8.3 atau 8.2 Anda perlu membuat pilihan, misalnya, dari direktori semua elemen yang memiliki kata "glaze" di namanya. Atau, dari direktori, pilih semua kontraktor yang nama belakangnya mengandung kata “Ivan”. Secara umum, periksa beberapa nilai string.

Untuk tujuan ini, ada operator di kueri 1C 8.3 dan 8.2 - "Serupa". Ini digunakan, masing-masing, dalam kondisi berikut:

Dapatkan 267 pelajaran video di 1C gratis:

Bagaimana cara menggunakan templat dalam kueri 1C?

Untuk menghasilkan kondisi pemilihan, Anda perlu meneruskan template tertentu sebagai parameter. Untuk membuat template, ada yang disebut simbol layanan.

Misalnya, karakter "%" mengizinkan rangkaian karakter arbitrer apa pun:

Ada karakter khusus lainnya:

  • % (persentase) - mengizinkan urutan karakter arbitrer apa pun;
  • _ (garis bawah) - karakter tunggal apa pun;
  • […] – satu karakter arbitrer dari yang tercantum di dalam tanda kurung. Selain membuat daftar karakter, Anda dapat menggunakan rentang. Contoh: ao;
  • [^...] – sama seperti yang sebelumnya, tetapi terbalik. Tanda "^" berarti negasi.