Condiții similare cu 1s. Similar cu condițiile de interogare

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ță: indică prezența oricărui caracter arbitrar
  • Caracter de negație „[^...]”: denotă 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. Nomenclatura CUM Ref | Nume ref. LIKE „%\%” CARACTER SPECIAL „\”

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

SELECTAȚI | Ref.Link |DIN | Director. Nomenclatura CUM Ref | 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. Nomenclatura CUM Ref | Nume ref. LIKE „%”

43
NULL – valori lipsă. A nu se confunda cu valoarea zero! NULL nu este un număr, nu este egal cu un spațiu, o referință goală sau nedefinit. NULL este o valoare de formare a tipului, adică există un tip NULL și o singură valoare de acest tip. NUL... 26
Pentru a genera și executa interogări către tabelele bazei de date în platforma 1C, este utilizat un obiect special al limbajului de programare Query. Acest obiect este creat prin apelarea constructului New Request. Cerere convenabilă... 18
Articolul oferă tehnici utile atunci când lucrați cu interogări 1C v.8.2, precum și informații care nu sunt atât de bine cunoscute despre limbajul de interogare. Nu încerc să ofer o descriere completă a limbajului de interogare, dar vreau să mă opresc doar asupra... 12
M-am confruntat cu sarcina de a selecta toate documentele de plată și de a le grupa după tipul de document! După ce am căutat prin toate serviciile de locuințe și comunale și pe internet, mi-am dat seama că nu există o modalitate ușoară de a obține Tipul de document în cerere: (a trebuit să...

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.
  • Poate dura mult timp pentru a completa cu tabele mari.
  • Ș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 pătrate)

  • 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 simbol de excludere ^ 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

CA- Operator pentru verificarea asemănării unui șir cu un model. Analog de LIKE în SQL.
Operator CA vă permite să comparați valoarea expresiei specificate în stânga acesteia cu șirul de model specificat în dreapta. Valoarea expresiei trebuie să fie de tip șir. Dacă valoarea expresiei se potrivește cu modelul, rezultatul operatorului va fi TRUE, altfel va fi FALS.
Următoarele caractere din șirul șablon sunt caractere de serviciu și au o semnificație diferită de caracterul șir:
. % (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 între paranteze drepte
O enumerare poate conține intervale, de exemplu a-z, care indică un caracter arbitrar inclus în interval, inclusiv capetele intervalului.
. [^...] (în paranteze drepte un semn de negație urmat de unul sau mai multe caractere): orice caracter, altul decât cele enumerate după semnul de negație
Orice alt simbol înseamnă el însuși și nu poartă nicio sarcină suplimentară.
Dacă unul dintre caracterele enumerate trebuie să fie scris ca el însuși, atunci 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, model „%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.

Exemple de utilizare:
Cod 1C v 8.x Procedura BankEndTextInput(Element, Text, Valoare, StandardProcessing)
StandardProcessing = Fals;
//Efectuați o interogare cu o căutare folosind un model precum „%” +<Текст введенный пользователм в поле ввода> + "%"
Solicitare = Solicitare nouă;
Query.SetParameter("Nume", "%" + Text + "%");
Query.Text = „SELECT
| Bănci.Link
|DIN
| Director.Bănci CUM Bănci
|UNDE
| Bănci.Nume SIMILAR &Nume";

Rezultat = Query.Run();
Selectie = Result.Select();
Dacă Rezultat.Gol() Atunci
//Nimic gasit. Aici puteți afișa un mesaj sau puteți face altceva :)
In caz contrar
//Obțineți rezultatele
tzResults = Result.Unload();
//Pregătește o listă de valori care va conține elementele găsite.
Valoare = New ValueList();
Value.LoadValues(tzResults.UnloadColumn("Link"));
endIf;
Sfârșitul procedurii

Este necesar ca „Acordurile implicite” să includă numai numele acordului principal etc.:
Cod 1C v 8.x Alegere
Când numele este ASEMĂNĂR cu „Nr. acord %”, atunci „Concord cu număr” // Orice linie care începe cu „Nr. acord este potrivită
Când numele este ASEMĂNĂR cu „Main Agreement%[^А-яЁе”+Symbol(33)+"-"+Symbol(126)+"№"""+Symbols.PS+Symbols.Tab+Symbols.PF+Symbols .NPP+ Symbols.VTab+"]%" apoi "Default Contracts" // Orice linie care începe cu "Main Contract" este potrivită
Altfel "Altul"
Încheiați ca un fel de contract

Informatii preluate de pe site

În ciuda tuturor deficiențelor, 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 capacităț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 Nomenclature.Name AS Nume FROM Directory.Nomenclature AS Nomenclature WHERE Nomenclature.Name 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 în 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.