Utilizarea este similară cu cererea 1s 8.2. Similar cu condițiile de interogare

În ciuda tuturor neajunsurilor, căutarea în câmpuri de text este încă una dintre cele mai populare. Putem găsi tipuri de date șir peste tot - nume, numere de cont, adrese, precum și alte informații pot fi stocate în acest format. În interogările în limbajul 1C încorporat, pentru comoditatea dezvoltatorilor, este utilizat un operator special „LIKE”. Aceasta este una dintre cele mai utilizate comenzi, așa că fără o cunoaștere aprofundată a sintaxei și a capabilităților sale, va fi dificil pentru un programator să lucreze.

Folosind operatorul LIKE

Înainte de a utiliza orice operator în practică, trebuie să înțelegeți clar scopul, locurile de aplicare și sintaxa acestuia. Scopul utilizării „LIKE” într-o solicitare 1C este de a verifica îndeplinirea condiției prezentate ca șablon. Valoarea returnată este de tip boolean - adevărat sau fals - indicând dacă condiția specificată este adevărată. Operatorul LIKE poate fi utilizat în mai multe locuri într-o interogare:

  • În blocul de condiții, desemnat prin cuvântul cheie „UNDE”;
  • În proiectarea alegerii, atunci când, altfel, se termină;
  • Direct în câmpurile de selecție, ca urmare a comparării câmpurilor.

Sintaxa de verificare este întotdeauna aceeași și constă din 3 legături. În stânga este valoarea textului care este verificată, apoi operatorul „LIKE” însuși, iar în dreapta este șablonul care este verificat. Pentru a crea rapid și ușor șabloane, există simboluri speciale care facilitează dezvoltarea:

  1. „%” este o secvență de orice caractere de lungime arbitrară. Folosit pentru a căuta cuvinte sau numere individuale dintr-un șir;
  2. „_” – orice caracter unic. Destinat să indice prezența unui singur caracter;
  3. „[...]” este o secvență de caractere de comparat cu un caracter dintr-un șir. Cu ajutorul unui astfel de model, se verifică o potrivire cu oricare dintre caracterele enumerate între paranteze. De asemenea, puteți specifica un interval de numere sau litere ([a-g], );
  4. „[^...]” este modelul opus celui precedent. Se verifică diferența dintre caracterul specificat în rând și cele enumerate între paranteze.

Pentru a înțelege și înțelege mai bine principiile creării de șabloane corecte, să ne uităm la câteva exemple care sunt adesea întâlnite în viața dezvoltatorilor. Primul este atunci când trebuie să selectăm din directorul de nomenclatură toate articolele în numele cărora apare cuvântul „CUTTER”. În acest caz, trebuie să folosim LIKE în condițiile de interogare:

SELECT Nomenclatură.Nume AS Nume FROM Director.Nomenclatură AS Nomenclatură WHERE Nomenclatură.Nume SIMILAR cu „% CUTTER%”

Dacă eliminăm ambele simboluri „%”, interogarea va afișa un produs al cărui nume se potrivește complet cu cel specificat între ghilimele. Dacă părăsim șablonul „CUTTER%” sau „% CUTTER”, atunci rezultatul va fi o listă de articole care se termină sau, respectiv, încep cu o anumită combinație de caractere.


Să ne uităm la o problemă care poate deruta programatorii începători care nu cunosc sintaxa interogării. Să presupunem că trebuie să găsiți toate articolele care au simbolul „%” în numele lor. În special pentru cazurile în care trebuie să căutați caractere rezervate, există un operator „caracter special”. #,\,/,~ și alte caractere pot fi folosite ca caracter special, după care orice caractere rezervate vor denota pur și simplu un semn.

SELECTAȚI Nomenclatură.Nume AS Nume FROM Director.Nomenclatură AS Nomenclatură WHERE Nomenclatură.Nume SIMILAR cu „%#%” CARACTER SPECIAL „#”

Dacă trebuie să utilizați un parametru într-o căutare, atunci variabila din interogare cu parametrul SIMILAR este utilizată folosind adăugare. Rețineți că parametrul trebuie să fie de tip șir sau va trebui să îl convertiți într-un șir în cerere. Aceasta este o operație destul de complicată și este mai bine să o excludeți în avans.

SELECT Nomenclature.Name AS Nume FROM Directory.Nomenclature AS Nomenclature WHERE Nomenclature.Name SIMILAR cu „%” + &name + „%”

Funcția SIMILAR este aplicabilă în toate versiunile platformei, începând de la 8, iar datorită aplicabilității sale, dezvoltatorii 1C nu vor dori să o schimbe. Desigur, căutarea textului depinde întotdeauna de acuratețea numelui introdus, dar rămâne totuși una dintre cele mai comune. În acest sens, dezvoltatorii profesioniști 1C trebuie să studieze utilizarea SIMILAR cu toate nuanțele sale.

Operatorul SIMILAR dintr-o interogare verifică valorile șirurilor din tabele pentru similaritate cu un model.
Se folosește astfel: șirul de verificat este plasat în stânga acestui operator, iar modelul este plasat în dreapta.

După verificare, returnează True sau False; în consecință, este utilizat activ în condiții.
Următoarele caractere de serviciu sunt folosite pentru a crea un șablon:

  • % (procent) - o secvență care conține orice număr de caractere arbitrare
  • _ (subliniere) - un caracter arbitrar
  • […] (unul sau mai multe caractere între paranteze drepte) - orice caracter unic enumerat în paranteze pătrate
    De asemenea, pe lângă diferite simboluri, puteți utiliza intervale, de exemplu a-z(A-z), ceea ce înseamnă prezența unui simbol arbitrar inclus în interval, inclusiv capetele intervalului.
  • [^...] (în paranteze pătrate un semn de negație urmat de unul sau mai multe caractere) - orice caracter, altul decât cele enumerate după semnul de negație

Simbolurile rămase sunt utilizate în scopul propus.
Dacă este necesar să se transmită unul dintre caracterele de serviciu de mai sus ca simbol, atunci acesta trebuie să fie precedat de<Спецсимвол>. Eu insumi<Спецсимвол>(orice caracter adecvat) este definit în aceeași instrucțiune după cuvântul cheie SPECIAL CHARACTER.
De exemplu, modelul „%ABV[abvg]\_abv%” CARACTER SPECIAL „\” înseamnă un subșir format dintr-o succesiune de caractere:
literele A; literele B; literele B; o cifră; una dintre literele a, b, c sau d; sublinia; literele a; literele b; literele v.
Mai mult, această secvență poate fi precedată de un set arbitrar de caractere.

Procedura Select AgreementContainingInNameText(mText)
//În cerere vom folosi un șablon precum "%" + mText + "%" Request = New Request; Query.SetParameter("Nume", "%" + Text + "%"); Request.Text = "SELECT | Acorduri. Link, | Acorduri. Proprietar | FROM | Director. Contracte ale contrapartidelor AS Acorduri | | WHERE | Acorduri. Nume SIMILAR & Nume"; Rezultat = Query.Run(); Selectie = Result.Select(); Raport ("Acordurile care conțin în nume: " + mText + " au următoarele contrapărți"); While Selection.Next() Cycle Report("Contraparte: " + Selection.Owner + "; Acord: " + Selection. Link EndIf; EndProcedure

Să ne uităm la scopul și utilizarea operatorului condiționat LIKE(eng. LIKE)în limbajul de interogare 1C în exemple.

Trecere rapidă

Scop

Verificați dacă valoarea șirului din solicitare se potrivește cu modelul specificat - returnează o valoare booleană (adevărat sau fals).

  • Verificarea este independentă de caz.
  • Interogarea folosește indecși de tabel, care nu au legătură cu indecșii de căutare full-text.
  • Completarea cu mese mari poate dura mult.
  • Șirurile de lungime nelimitată ar trebui convertite folosind funcția SUBSTRING

Locuri de utilizare

  • În termenii operatorului UNDE
  • În condiţiile de proiectare ALEGEREA CÂND<>ATUNCI "" ELSE "" SE TERMINA
  • În câmpurile de selecție (de exemplu: Name LIKE &ParameterSimilar cu StringSuitable)

Descrierea sintaxei operatorului LIKE

Parametrul operator trebuie să fie un șir de caractere: poate fi specificat ca constantă sau transmis ca parametru de cerere.

Literele (măștile) enumerate mai jos pot fi folosite împreună sau separat.

Specificație exactă a șirului

SELECTAȚI primele 10
Chei.Nume
DIN
Director.Chei AS Chei
UNDE
Keys.Name SIMILAR cu „1” // Echivalent cu Keys.Name ="1"

Rezultat:

% este un literal care înseamnă un număr arbitrar de caractere

SELECTAȚI primele 10
Chei.Nume
DIN
Director.Chei AS Chei
UNDE
Keys.Name LIKE „%”

Rezultat: oricare 10 articole

_ (subliniere): literal care se potrivește cu orice caracter

Exemplul #1:

SELECTAȚI primele 10
Chei.Nume
DIN
Director.Chei AS Chei
UNDE
Keys.Name LIKE „_”

Exemplul #2:începând cu orice caracter, urmat de „1” și apoi orice caracter

SELECTAȚI primele 10
Chei.Nume
DIN
Director.Chei AS Chei
UNDE
Keys.Name SIMILAR cu „_1%”

Rezultat:

(unul sau mai multe caractere între paranteze drepte)

  • Fiecare literal care se potrivește cu orice caracter este folosit ca un SAU.
    Este acceptabil să specificați un interval, de exemplu a-z,0-5, adică un caracter arbitrar din intervalul specificat

Exemplu

SELECTAȚI primele 10
Chei.Nume
DIN
Director.Chei AS Chei
UNDE
Keys.Name SIMILAR cu „[l]%”

Rezultat: 10 începând cu "l" sau "z"

Exemplu:începând cu 5,6,7

SELECTAȚI primele 10
Chei.Nume
DIN
Director.Chei AS Chei
UNDE
Keys.Name LIKE „%”

Rezultat:

[^] (în paranteze pătrate există un semn de evacuare ^ urmat de unul sau mai multe caractere)

Echivalent cu orice caracter (_) cu excepția celor specificate ()

Exemplu

SELECTAȚI primele 10
Chei.Nume
DIN
Director.Chei AS Chei
UNDE
Chei.Numele SIMILAR cu „8.[^012]%”//nu includ 8.0,8.1,8.2

Rezultat: toate începând cu „8”. excluzând cele indicate

CARACTER SPECIAL - comandă pentru specificarea caracterelor înregistrate mai sus în cerere

Ca simbol de serviciu, este acceptabil să utilizați cel puțin: #,~,/,\

Exemplu:

SELECTAȚI primele 10
Chei.Nume
DIN
Director.Chei AS Chei
UNDE
Keys.Name LIKE „#_” CARACTER SPECIAL „#”

Rezultat:

Aplicabilitate pe platforme

Parametri incorecți LIKE<>

  • Se transmite un parametru de tip non-șir: de exemplu, numărul 1 în loc de șirul „1”
  • Un câmp de tip non-șir este comparat cu o mască validă (de exemplu, o legătură) sau la conectare, valoarea nu este verificată pentru IsNUL

Acordați atenție textului de eroare în care este afișată întrebarea:

Chei.Nume SIMILAR<>&L

Operator CA vă permite să comparați datele de tip șir într-o interogare care este situată în stânga operatorului cu datele de tip șir care se află în dreapta operatorului. Rezultatul comparației este evaluat la Adevărat sau Fals, astfel încât comparația poate fi aplicată ca o condiție.

Pentru operator CA Există caractere de serviciu speciale care nu sunt percepute ca șir:

  • Simbolul procentual „%”: indică prezența oricărui număr de caractere arbitrare într-un șir
  • „[...]” unul sau mai multe caractere între paranteze pătrate: indică prezența oricărui (unică) dintre caracterele enumerate. De asemenea, se poate specifica o serie de caractere (de exemplu)
  • „_” liniuță de subliniere: indică prezența oricărui caracter arbitrar
  • Caracter de negație „[^...]”: indică prezența oricărui caracter unic, altul decât cele specificate între paranteze drepte
Dacă trebuie să specificați unul dintre caracterele speciale de mai sus pentru comparație, trebuie să utilizați cuvântul cheie „SIMBOL SPECIAL”

Caracteristici de utilizare cu diferite SGBD

IBM DB2„Doar un parametru poate fi plasat în dreapta operatorului SIMILAR. Singurele caractere joker sunt „_” (subliniere care înseamnă orice caracter) și „%” (procent care înseamnă o secvență de orice caractere).
În cazul utilizării unui SGBD " PostgreSQL" sau " Baza de date Oracle„caracterele speciale „paranteze pătrate [...]” sunt acceptate numai dacă sunt specificate în text în cerere și NU sunt trecute ca parametru în cerere.

Astfel, în baza de date de fișiere, caracterele speciale vor fi întotdeauna percepute la fel, și diferit în funcție de SGBD utilizat în versiunea client-server.

Exemplu: selectați produse care conțin simbolul „%” în nume

SELECTAȚI | Ref.Link |DIN | Director Nomenclator CUM Ref |UNDE | Nume ref. LIKE „%\%” CARACTER SPECIAL „\”

Exemplu: selectați produse ale căror nume încep cu cuvântul „Tank”

SELECTAȚI | Ref.Link |DIN | Director Nomenclator CUM Ref |UNDE | Nume ref. SIMILARE cu „Bak%”

Exemplu: selectați produse ale căror nume se termină cu un număr

SELECTAȚI | Ref.Link |DIN | Director Nomenclator CUM Ref |UNDE | Nume ref. SIMILAR cu „%”

Uneori apare o situație când în 1C 8.3 sau 8.2 trebuie să faceți o selecție, de exemplu, dintr-un director cu toate elementele care au cuvântul „glazură” în numele lor. Sau, din director, selectați toți contractanții ale căror nume de familie conțin cuvântul „Ivan”. În general, verificați o anumită valoare a șirului.

În acest scop, există un operator în interogările 1C 8.3 și 8.2 - „Similar”. Se foloseste, respectiv, in urmatoarele conditii:

Obțineți 267 de lecții video pe 1C gratuit:

Cum să utilizați șabloanele în interogările 1C?

Pentru a genera o condiție de selecție, trebuie să treceți un anumit șablon ca parametru. Pentru a crea un șablon, există așa-numitele simboluri de serviciu.

De exemplu, caracterul „%” permite orice succesiune de caractere arbitrare:

Există și alte personaje speciale:

  • % (procent) - permite orice succesiune de caractere arbitrare;
  • _ (subliniere) - orice caracter unic;
  • […] – un caracter arbitrar dintre cele enumerate între paranteze. Pe lângă listarea caracterelor, puteți utiliza intervale. Exemplu: a-o;
  • [^...] – la fel ca precedentul, dar invers. Semnul „^” înseamnă negație.