Upotreba je slična zahtjevu 1s 8.2. Slično uslovima upita

Unatoč svim nedostacima, pretraživanje tekstualnih polja i dalje je jedno od najpopularnijih. String tipove podataka možemo pronaći svuda - imena, brojevi računa, adrese, kao i druge informacije mogu se pohraniti u ovom formatu. U upitima na ugrađenom 1C jeziku, radi praktičnosti programera, koristi se poseban operator "LIKE". Ovo je jedna od najčešće korištenih naredbi, tako da će programeru biti teško raditi bez temeljnog poznavanja sintakse i mogućnosti.

Korištenje operatora LIKE

Prije upotrebe bilo kojeg operatora u praksi, morate jasno razumjeti njegovu svrhu, mjesta primjene i sintaksu. Svrha korištenja “LIKE” u 1C zahtjevu je provjera ispunjenja uslova predstavljenog kao predložak. Povratna vrijednost je Boolean tip - istinita ili netočna - koja pokazuje da li je navedeni uvjet istinit. Operator LIKE se može koristiti na nekoliko mjesta u upitu:

  • U bloku uslova, označenom ključnom riječi “GDJE”;
  • U dizajnu Choice When Then Otherwise End;
  • Direktno u poljima za odabir, kao rezultat poređenja polja.

Sintaksa verifikacije je uvek ista i sastoji se od 3 veze. Na lijevoj strani je tekstualna vrijednost koja se provjerava, zatim sam operator “LIKE”, a desno je predložak koji se provjerava. Za brzo i jednostavno kreiranje predložaka postoje posebni simboli koji olakšavaju razvoj:

  1. “%” je niz bilo kojeg karaktera proizvoljne dužine. Koristi se za traženje pojedinačnih riječi ili brojeva u nizu;
  2. “_” – bilo koji pojedinačni znak. Namijenjen da ukaže na prisustvo jednog znaka;
  3. “[...]” je niz znakova za upoređivanje sa znakom u nizu. Uz pomoć takvog uzorka, provjerava se podudaranje bilo kojeg od znakova navedenih u zagradama. Također možete odrediti raspon brojeva ili slova ([a-g], );
  4. “[^...]” je suprotan obrazac od prethodnog. Provjerava se razlika između znakova navedenog u retku i onih navedenih u zagradama.

Da bismo bolje razumjeli i razumjeli principe kreiranja ispravnih predložaka, pogledajmo neke primjere koji se često susreću u životu programera. Prvi je kada iz imenika nomenklature treba da izaberemo sve stavke u čijim nazivima se pojavljuje riječ “CUTTER”. U ovom slučaju, moramo koristiti LIKE u uslovima upita:

SELECT Nomenclature.Name AS Name FROM Directory.Nomenclature AS Nomenclature WHERE Nomenclature.Name SLIČNO na "% CUTTER%"

Ako uklonimo oba simbola “%”, upit će pokazati proizvod čiji naziv u potpunosti odgovara onom navedenom u navodnicima. Ako ostavimo predložak “CUTTER%” ili “% CUTTER”, rezultat će biti lista stavki koje završavaju ili počinju, respektivno, datom kombinacijom znakova.


Pogledajmo problem koji može zbuniti programere početnike koji ne poznaju sintaksu upita. Recimo da trebate pronaći sve stavke koje u nazivu imaju simbol "%". Posebno za slučajeve kada trebate tražiti rezervirane znakove, postoji operator “posebnih znakova”. #,\,/,~ i drugi znakovi se mogu koristiti kao specijalni znak, nakon čega će svi rezervirani znakovi jednostavno označavati znak.

SELECT Nomenclature.Name AS Name FROM Directory.Nomenclature AS Nomenclature WHERE Nomenclature.Name SLIČNO na "%#%" POSEBNI ZNAK "#"

Ako trebate koristiti parametar u pretraživanju, tada se varijabla u upitu sa parametrom SLIČNO koristi pomoću zbrajanja. Zapamtite da parametar mora biti tipa string ili ćete ga morati pretvoriti u string u zahtjevu. Ovo je prilično komplicirana operacija i bolje je isključiti je unaprijed.

SELECT Nomenclature.Name AS Name FROM Directory.Nomenclature AS Nomenclature WHERE Nomenclature.Name SLIČNO na "%" + &name + "%"

Funkcija SLIČNA je primjenjiva u svim verzijama platforme, počevši od 8, a zbog njene primjenjivosti 1C programeri neće je htjeti mijenjati. Naravno, pretraživanje teksta uvijek ovisi o tačnosti unesenog imena, ali i dalje ostaje jedno od najčešćih. S tim u vezi, profesionalni 1C programeri moraju proučiti upotrebu SLIČNOG sa svim njegovim nijansama.

Operator SIMILAR u upitu provjerava vrijednosti stringova iz tabela radi sličnosti sa uzorkom.
Koristi se na sljedeći način: string koji treba provjeriti se postavlja lijevo od ovog operatora, a obrazac se postavlja desno.

Nakon provjere, vraća True ili False, shodno tome, aktivno se koristi u uvjetima.
Za kreiranje predloška koriste se sljedeći uslužni znakovi:

  • % (postotak) - niz koji sadrži bilo koji broj proizvoljnih znakova
  • _ (donja crta) - jedan proizvoljan znak
  • […] (jedan ili više znakova u uglastim zagradama) - svaki pojedinačni znak naveden unutar uglastih zagrada
    Takođe, pored različitih simbola, možete koristiti i opsege, na primer a-z(A-z), što znači prisustvo proizvoljnog simbola uključenog u opseg, uključujući i krajeve opsega.
  • [^...] (u uglastim zagradama znak negacije iza kojeg slijedi jedan ili više znakova) - bilo koji pojedinačni znak osim onih navedenih iza znaka negacije

Preostali simboli se koriste prema njihovoj namjeni.
Ako je potrebno prenijeti jedan od gore navedenih uslužnih znakova kao simbol, onda mu mora prethoditi<Спецсимвол>. Sebe<Спецсимвол>(bilo koji odgovarajući znak) je definiran u istoj izjavi nakon ključne riječi SPECIAL CHARACTER.
Na primjer, obrazac “%ABV[abvg]\_abv%” POSEBNI KARAKTER “\” znači podniz koji se sastoji od niza znakova:
slova A; slova B; slova B; jedna cifra; jedno od slova a, b, c ili d; donja crta; slova a; slova b; slova v.
Štaviše, ovom nizu može prethoditi proizvoljan skup znakova.

Procedura Odaberite UgovorContainingInNameText(mText)
//U zahtjevu ćemo koristiti šablon poput "%" + mText + "%" Zahtjev = Novi zahtjev; Query.SetParameter("Name", "%" + Text + "%"); Request.Text = "IZABIR | Ugovori. Link, | Ugovori. Vlasnik | IZ | Imenik. Ugovori drugih strana KAO Ugovori | | GDJE | Ugovori. Ime SLIČNO & Naziv"; Rezultat = Query.Run(); Odabir = Result.Select(); Izvještaj("Sporazumi koji u nazivu sadrže: " + mText + " imaju sljedeće ugovorne strane"); Dok Selection.Next() Cycle Report("Counterparty: " + Selection.Owner + "; Ugovor: " + Selection. Link EndIf; EndProcedure

Pogledajmo svrhu i upotrebu uslovnog operatora LIKE(eng. LIKE) u 1C jeziku upita u primjerima.

Brzi prolaz

Svrha

Provjerite da li vrijednost stringa u zahtjevu odgovara navedenom uzorku - vraća Booleovu vrijednost (TRUE ili FALSE).

  • Provjera je nezavisna od slučaja.
  • Upit koristi indekse tabela – koji nisu povezani sa indeksima pretraživanja punog teksta.
  • Može potrajati dosta vremena da se završi sa velikim stolovima.
  • Nizove neograničene dužine treba pretvoriti pomoću funkcije SUBSTRING

Mesta upotrebe

  • U uslovima operatera GDJE
  • U projektnim uslovima IZBOR KADA<>ONDA "" ELSE "" KRAJ
  • U poljima za odabir (na primjer: Ime LIKE &ParameterSličan StringSuitable)

Opis sintakse operatora LIKE

Parametar operatora mora biti string: može se navesti kao konstanta ili proslijediti kao parametar zahtjeva.

Literale (maske) navedene u nastavku mogu se koristiti zajedno ili odvojeno.

Tačna specifikacija niza

SELECT prvih 10
Ključevi.Ime
OD
Imenik.Ključevi AS ključevi
GDJE
Keys.Name SLIČNO na "1" // Ekvivalentno Keys.Name ="1"

rezultat:

% je doslovno što znači proizvoljan broj bilo kojeg karaktera

SELECT prvih 10
Ključevi.Ime
OD
Imenik.Ključevi AS ključevi
GDJE
Ključevi.Naziv LIKE "%"

Rezultat: bilo 10 stavki

_ (donja crta): doslovna oznaka koja odgovara bilo kojem znaku

Primjer #1:

SELECT prvih 10
Ključevi.Ime
OD
Imenik.Ključevi AS ključevi
GDJE
Ključevi.Ime LIKE "_"

Primjer #2: počevši od bilo kojeg znaka, nakon čega slijedi “1”, a zatim bilo koji karakter

SELECT prvih 10
Ključevi.Ime
OD
Imenik.Ključevi AS ključevi
GDJE
Ključevi.Ime SLIČNO do "_1%"

rezultat:

(jedan ili više znakova u uglastim zagradama)

  • Svaki literal koji odgovara bilo kojem znaku koristi se kao OR.
    Prihvatljivo je navesti raspon, na primjer a-z,0-5, što znači proizvoljan znak iz navedenog raspona

Primjer

SELECT prvih 10
Ključevi.Ime
OD
Imenik.Ključevi AS ključevi
GDJE
Ključevi.Ime SLIČNO do "[l]%"

Rezultat: 10 počevši sa "l" ili "z"

primjer: počevši od 5,6,7

SELECT prvih 10
Ključevi.Ime
OD
Imenik.Ključevi AS ključevi
GDJE
Ključevi.Naziv LIKE "%"

rezultat:

[^] (u uglastim zagradama nalazi se znak za izlaz ^ iza kojeg slijedi jedan ili više znakova)

Ekvivalentno bilo kojem znaku (_) osim onih navedenih ()

Primjer

SELECT prvih 10
Ključevi.Ime
OD
Imenik.Ključevi AS ključevi
GDJE
Ključevi.Ime SLIČNO na "8.[^012]%"//ne uključuje 8.0,8.1,8.2.

Rezultat: sve počinje sa "8." isključujući one naznačene

SPECIJALNI KARAKTER - naredba za određivanje znakova koji su gore registrovani u zahtjevu

Kao simbol usluge, prihvatljivo je koristiti najmanje: #,~,/,\

primjer:

SELECT prvih 10
Ključevi.Ime
OD
Imenik.Ključevi AS ključevi
GDJE
Ključevi.Ime LIKE "#_" POSEBNI ZNAK "#"

rezultat:

Primjenjivost u platformama

Netačni parametri LIKE<>

  • Prenosi se parametar tipa koji nije niz: na primjer, broj 1 umjesto niza "1"
  • Polje tipa koji nije niz uspoređuje se s važećom maskom (na primjer, veza) ili se prilikom povezivanja vrijednost ne provjerava za IsNUL

Obratite pažnju na tekst greške u kojem je prikazano pitanje:

Ključevi.Naziv SLIČNO<>&L

Operater LIKE omogućava vam da uporedite podatke tipa niza u upitu koji se nalazi lijevo od operatora sa podacima tipa string koji se nalazi desno od operatora. Rezultat poređenja se procjenjuje na Tačno ili Netačno, tako da se poređenje može primijeniti kao uvjet.

Za operatera LIKE Postoje posebni uslužni znakovi koji se ne percipiraju kao niz:

  • Simbol procenta "%": označava prisustvo bilo kojeg broja proizvoljnih znakova u nizu
  • "[...]" jedan ili više znakova u uglastim zagradama: označava prisustvo bilo kojeg (jednog) od navedenih znakova. Također, raspon znakova se može specificirati (na primjer)
  • "_" donja crta: označava prisustvo bilo kojeg proizvoljnog znaka
  • "[^...]" znak negacije: označava prisustvo bilo kojeg pojedinačnog znaka osim onih navedenih u uglastim zagradama
Ako trebate navesti jedan od gore navedenih posebnih znakova za poređenje, morate koristiti ključnu riječ "SPECIAL SYMBOL"

Karakteristike upotrebe sa raznim DBMS-ovima

IBM DB2"Samo parametar se može postaviti desno od SIMILAR operatora. Jedini zamjenski znakovi su "_" (podvlaka znači bilo koji znak) i "%" (postotak znači niz bilo kojeg karaktera).
U slučaju korištenja DBMS-a " PostgreSQL" ili " Oracle Database"posebni znakovi "uglaste zagrade [...]" se prihvataju samo ako su navedeni u tekstu u zahtjevu, a NE prosljeđuju se kao parametar zahtjevu.

Tako će se u bazi podataka specijalni znakovi uvijek percipirati na isti način, a različito ovisno o DBMS-u koji se koristi u verziji klijent-server.

Primjer: odaberite proizvode koji sadrže simbol "%" u nazivu

SELECT | Ref.Link |OD | Imenik Nomenklatura KAKO Ref | GDJE | Ref.Name KAO "%\%" POSEBNI KARAKTER "\"

Primjer: odaberite proizvode čiji nazivi počinju riječju "Tank"

SELECT | Ref.Link |OD | Imenik Nomenklatura KAKO Ref | GDJE | Ref.Name SLIČNO "Bak%"

Primjer: odaberite proizvode čiji nazivi završavaju brojem

SELECT | Ref.Link |OD | Imenik Nomenklatura KAKO Ref | GDJE | Ref.Naziv SLIČNO do "%"

Ponekad se javlja situacija kada u 1C 8.3 ili 8.2 trebate napraviti izbor, na primjer, iz direktorija svih elemenata koji u svom nazivu imaju riječ "glazura". Ili iz imenika odaberite sve izvođače u čijem prezimenu stoji riječ “Ivan”. Općenito, provjerite neku vrijednost niza.

U tu svrhu postoji operator u 1C upitima 8.3 i 8.2 - „Slično“. Koristi se, odnosno, u sledećim uslovima:

Nabavite 267 video lekcija na 1C besplatno:

Kako koristiti šablone u 1C upitima?

Da biste kreirali uvjet odabira, trebate proći određeni predložak kao parametar. Za kreiranje šablona postoje takozvani servisni simboli.

Na primjer, znak "%" dozvoljava bilo koji niz proizvoljnih znakova:

Postoje i drugi posebni karakteri:

  • % (postotak) - dozvoljava bilo koji niz proizvoljnih znakova;
  • _ (podvlaka) - bilo koji pojedinačni znak;
  • […] – jedan proizvoljan znak od onih navedenih u zagradama. Pored navođenja znakova, možete koristiti opsege. Primjer: a-o;
  • [^...] – isto kao i prethodni, ali obrnuto. Znak "^" znači negaciju.