Použitie je podobné požiadavke 1s 8.2. Podobné ako podmienky dotazu

Napriek všetkým nedostatkom je vyhľadávanie v textovom poli stále jedným z najobľúbenejších. Reťazcové dátové typy nájdeme všade – v tomto formáte môžu byť uložené mená, čísla účtov, adresy, ale aj ďalšie informácie. V otázkach v zabudovanom jazyku 1C sa pre pohodlie vývojárov používa špeciálny operátor „LIKE“. Ide o jeden z najpoužívanejších príkazov, takže bez dôkladnej znalosti jeho syntaxe a možností bude programátor pracovať len ťažko.

Pomocou operátora LIKE

Pred použitím akéhokoľvek operátora v praxi musíte jasne pochopiť jeho účel, miesta použitia a syntax. Účelom použitia „LIKE“ v žiadosti 1C je skontrolovať splnenie podmienky uvedenej ako šablóna. Návratová hodnota je booleovský typ – pravda alebo nepravda – označujúci, či je zadaná podmienka pravdivá. Operátor LIKE je možné použiť na niekoľkých miestach v dotaze:

  • V bloku podmienok označenom kľúčovým slovom „KDE“;
  • V dizajne Choice When Then Other End;
  • Priamo vo výberových poliach, ako výsledok porovnania polí.

Syntax overenia je vždy rovnaká a pozostáva z 3 odkazov. Naľavo je textová hodnota, ktorá sa kontroluje, potom samotný operátor „LIKE“ a napravo je kontrolovaná šablóna. Na rýchle a jednoduché vytváranie šablón existujú špeciálne symboly, ktoré uľahčujú vývoj:

  1. „%“ je postupnosť ľubovoľných znakov ľubovoľnej dĺžky. Používa sa na vyhľadávanie jednotlivých slov alebo čísel v reťazci;
  2. „_“ – ľubovoľný jednotlivý znak. Určené na označenie prítomnosti jedného znaku;
  3. „[...]“ je postupnosť znakov na porovnanie so znakom v reťazci. Pomocou takéhoto vzoru sa skontroluje zhoda s ktorýmkoľvek znakom uvedeným v zátvorkách. Môžete tiež určiť rozsah čísel alebo písmen ([a-g], );
  4. „[^...]“ je opačný vzor ako predchádzajúci. Kontroluje sa rozdiel medzi znakom uvedeným v riadku a znakmi uvedenými v zátvorkách.

Pre lepšie pochopenie a pochopenie princípov tvorby správnych šablón sa pozrime na niekoľko príkladov, s ktorými sa v živote vývojárov často stretávame. Prvým je, keď potrebujeme vybrať z nomenklatúrneho adresára všetky položky, v názvoch ktorých sa vyskytuje slovo „CUTTER“. V tomto prípade musíme v podmienkach dotazu použiť LIKE:

SELECT Nomenklatúra.Názov AS Názov FROM Adresár.Nomenklatúra AS Nomenklatúra WHERE Nomenklatúra.Názov PODOBNÉ ako "% CUTTER%"

Ak odstránime oba symboly „%“, dopyt zobrazí produkt, ktorého názov sa úplne zhoduje s názvom uvedeným v úvodzovkách. Ak ponecháme šablónu „CUTTER%“ alebo „% CUTTER“, výsledkom bude zoznam položiek končiacich alebo začínajúcich danou kombináciou znakov.


Pozrime sa na problém, ktorý môže zmiasť začínajúcich programátorov, ktorí nepoznajú syntax dotazu. Povedzme, že potrebujete nájsť všetky položky, ktoré majú v názve symbol „%“. Najmä pre prípady, keď potrebujete vyhľadať vyhradené znaky, existuje operátor „špeciálny znak“. #,\,/,~ a ďalšie znaky môžu byť použité ako špeciálny znak, po ktorom budú všetky vyhradené znaky jednoducho označovať znak.

SELECT Nomenklatúra.Názov AS Názov Z adresára.Nomenklatúra AS Nomenklatúra WHERE Nomenklatúra.Názov PODOBNÉ ako "%#%" ŠPECIÁLNY CHARAKTER "#"

Ak potrebujete použiť parameter vo vyhľadávaní, potom sa premenná v dotaze s parametrom PODOBNÉ použije pomocou sčítania. Pamätajte, že parameter musí byť typu reťazca, inak ho budete musieť previesť na reťazec v požiadavke. Ide o pomerne komplikovanú operáciu a je lepšie ju vopred vylúčiť.

SELECT Nomenklatúra.Názov AS Názov FROM Adresár.Nomenklatúra AS Nomenklatúra WHERE Nomenklatúra.Názov PODOBNÉ ako "%" + &meno + "%"

Funkcia SIMILAR je použiteľná vo všetkých verziách platformy, počnúc 8, a vzhľadom na jej použiteľnosť ju vývojári 1C nebudú chcieť meniť. Textové vyhľadávanie samozrejme vždy závisí od presnosti zadaného mena, no stále zostáva jedným z najbežnejších. V tomto ohľade musia profesionálni vývojári 1C študovať používanie SIMILAR so všetkými jeho nuansami.

Operátor PODOBNÝ v dotaze kontroluje hodnoty reťazcov z tabuliek na podobnosť so vzorom.
Používa sa nasledovne: reťazec, ktorý sa má skontrolovať, sa umiestni naľavo od tohto operátora a vzor sa umiestni napravo.

Po kontrole vráti hodnotu True alebo False, podľa toho sa aktívne používa v podmienkach.
Na vytvorenie šablóny sa používajú nasledujúce servisné znaky:

  • % (percento) – sekvencia obsahujúca ľubovoľný počet ľubovoľných znakov
  • _ (podčiarkovník) - jeden ľubovoľný znak
  • […] (jeden alebo viac znakov v hranatých zátvorkách) – každý jednotlivý znak uvedený v hranatých zátvorkách
    Okrem rôznych symbolov môžete použiť aj rozsahy, napríklad a-z(A-z), čo znamená prítomnosť ľubovoľného symbolu zahrnutého v rozsahu vrátane koncov rozsahu.
  • [^...] (v hranatých zátvorkách znak záporu nasledovaný jedným alebo viacerými znakmi) – každý jeden znak okrem tých, ktoré sú uvedené za znakom záporu

Zostávajúce symboly sa používajú na určený účel.
Ak je potrebné preniesť jeden z vyššie uvedených servisných znakov ako symbol, musí mu predchádzať<Спецсимвол>. Ja sám<Спецсимвол>(akýkoľvek vhodný znak) je definovaný v rovnakom príkaze za kľúčovým slovom SPECIAL CHARACTER.
Napríklad vzor „%ABV[abvg]\_abv%“ ŠPECIÁLNY ZNAK „\“ znamená podreťazec pozostávajúci zo sekvencie znakov:
písmená A; písmená B; písmená B; jedna číslica; jedno z písmen a, b, c alebo d; podčiarknuť; písmená a; písmená b; písmená v.
Okrem toho môže tejto sekvencii predchádzať ľubovoľná množina znakov.

Postup Vybrať dohodu ObsahujeInNameText(mText)
//V požiadavke použijeme šablónu ako "%" + mText + "%" Požiadavka = Nová požiadavka; Query.SetParameter("Name", "%" + Text + "%"); Request.Text = "SELECT | Dohody. Odkaz, | Dohody. Vlastník | FROM | Adresár. Zmluvy protistrán AS Dohody | | KDE | Dohody. Názov PODOBNÉ & Názov"; Vysledok = Query.Run(); Výber = Vysledok.Vyber(); Report("Dohody obsahujúce v názve: " + mText + " majú nasledujúce protistrany"); Kým Selection.Next() Cycle Report("Protistrana: " + Selection.Owner + "; Dohoda: " + Selection. Link EndIf; EndProcedure

Pozrime sa na účel a použitie podmieneného operátora LIKE (angl. LIKE) v dopytovacom jazyku 1C v príkladoch.

Rýchly prechod

Účel

Skontrolujte, či sa hodnota reťazca v požiadavke zhoduje so zadaným vzorom - vráti boolovskú hodnotu (TRUE alebo FALSE).

  • Kontrola je nezávislá od prípadu.
  • Dotaz používa indexy tabuliek, ktoré nesúvisia s indexmi fulltextového vyhľadávania.
  • Dokončenie pri veľkých stoloch môže trvať dlho.
  • Reťazce neobmedzenej dĺžky by sa mali konvertovať pomocou funkcie SUBSTRING

Miesta použitia

  • V podmienkach operátora WHERE
  • V podmienkach návrhu VOĽBA KEDY<>POTOM "" INAK "" KONIEC
  • V poliach výberu (napríklad: Názov LIKE &ParameterPodobný ako StringSuitable)

Popis syntaxe operátora LIKE

Parameter operátora musí byť reťazec: môže byť špecifikovaný ako konštanta alebo odovzdaný ako parameter požiadavky.

Literály (masky) uvedené nižšie je možné použiť spolu alebo samostatne.

Presná špecifikácia reťazca

VYBERTE prvých 10
Keys.Name
OD
Directory.Keys AS kľúče
KDE
Keys.Name PODOBNÉ ako "1" // Ekvivalentné s Keys.Name ="1"

výsledok:

% je doslovné označenie, ktoré znamená ľubovoľný počet ľubovoľných znakov

VYBERTE prvých 10
Keys.Name
OD
Directory.Keys AS kľúče
KDE
Keys.Name LIKE "%"

Výsledok: ľubovoľných 10 položiek

_ (podčiarkovník): doslovná zhoda s ľubovoľným znakom

Príklad č. 1:

VYBERTE prvých 10
Keys.Name
OD
Directory.Keys AS kľúče
KDE
Keys.Name LIKE "_"

Príklad č. 2: počnúc ľubovoľným znakom, po ktorom nasleduje „1“ a potom ľubovoľnými znakmi

VYBERTE prvých 10
Keys.Name
OD
Directory.Keys AS kľúče
KDE
Kľúče. Názov PODOBNÝ ako „_1 %“

výsledok:

(jeden alebo viac znakov v hranatých zátvorkách)

  • Každý literál, ktorý sa zhoduje s ktorýmkoľvek znakom, sa používa ako ALEBO.
    Je prijateľné špecifikovať rozsah, napríklad a-z,0-5, čo znamená ľubovoľný znak zo špecifikovaného rozsahu

Príklad

VYBERTE prvých 10
Keys.Name
OD
Directory.Keys AS kľúče
KDE
Kľúče. Názov PODOBNÝ ako „[l] %“

Výsledok: 10 začínajúce na „l“ alebo „z“

Príklad: počnúc 5,6,7

VYBERTE prvých 10
Keys.Name
OD
Directory.Keys AS kľúče
KDE
Keys.Name LIKE "%"

výsledok:

[^] (v hranatých zátvorkách je znak escape ^, za ktorým nasleduje jeden alebo viac znakov)

Zodpovedá akémukoľvek znaku (_) okrem tých, ktoré sú špecifikované ()

Príklad

VYBERTE prvých 10
Keys.Name
OD
Directory.Keys AS kľúče
KDE
Keys.Name PODOBNÉ ako "8.[^012]%"//nezahŕňajú 8.0,8.1,8.2

Výsledok: všetky začínajú na "8." okrem uvedených

ŠPECIÁLNY CHARACTER - príkaz na zadanie vyššie zaregistrovaných znakov v požiadavke

Ako symbol služby je prijateľné použiť aspoň: #,~,/,\

Príklad:

VYBERTE prvých 10
Keys.Name
OD
Directory.Keys AS kľúče
KDE
Keys.Name AKO "#_" ŠPECIÁLNY CHARAKTER "#"

výsledok:

Použiteľnosť v platformách

Nesprávne parametre LIKE<>

  • Odovzdáva sa parameter nereťazcového typu: napríklad číslo 1 namiesto reťazca „1“
  • Pole nereťazcového typu sa porovnáva s platnou maskou (napríklad odkaz) alebo pri pripájaní sa hodnota nekontroluje na IsNUL

Venujte pozornosť chybovému textu, kde sa zobrazuje otázka:

Kľúče.Názov PODOBNÝ<>&L

Operátor PÁČI SA MI TO umožňuje porovnať údaje typu reťazec v dotaze, ktorý sa nachádza naľavo od operátora, s údajmi typu reťazec, ktorý sa nachádza napravo od operátora. Výsledok porovnania sa vyhodnotí ako Pravda alebo Nepravda, takže porovnanie možno použiť ako podmienku.

Pre operátora PÁČI SA MI TO Existujú špeciálne servisné znaky, ktoré nie sú vnímané ako reťazec:

  • Symbol percenta "%": označuje prítomnosť ľubovoľného počtu ľubovoľných znakov v reťazci
  • "[...]" jeden alebo viac znakov v hranatých zátvorkách: označuje prítomnosť ktoréhokoľvek (jediného) z uvedených znakov. Tiež je možné zadať rozsah znakov (napr.
  • "_" podčiarknutie: označuje prítomnosť ľubovoľného znaku
  • Negačný znak „[^...]“: označuje prítomnosť akéhokoľvek samostatného znaku okrem tých, ktoré sú uvedené v hranatých zátvorkách
Ak potrebujete na porovnanie zadať jeden z vyššie uvedených špeciálnych znakov, musíte použiť kľúčové slovo „ŠPECIÁLNY SYMBOL“

Vlastnosti použitia s rôznymi DBMS

IBM DB2"Napravo od operátora PODOBNÝ možno umiestniť iba parameter. Jedinými zástupnými znakmi sú "_" (podčiarkovník znamená ľubovoľný znak) a "%" (percento znamená postupnosť ľubovoľných znakov).
V prípade použitia DBMS " PostgreSQL" alebo " Oracle Database"špeciálne znaky "hranaté zátvorky [...]" sú akceptované iba vtedy, ak sú špecifikované v texte v požiadavke a NIE sú odovzdané ako parameter požiadavky.

V databáze súborov teda budú špeciálne znaky vždy vnímané rovnako a odlišne v závislosti od DBMS použitej vo verzii klient-server.

Príklad: vyberte produkty obsahujúce v názve symbol „%“.

VYBERTE | Ref.Link |OD | Zoznam Nomenklatúra AKO Ref | KDE | Ref.Name AKO "%\%" ŠPECIÁLNY CHARAKTER "\"

Príklad: vyberte produkty, ktorých názvy začínajú slovom „Tank“

VYBERTE | Ref.Link |OD | Zoznam Nomenklatúra AKO Ref | KDE | Ref.Name PODOBNÉ ako "Bak%"

Príklad: vyberte produkty, ktorých názvy končia číslom

VYBERTE | Ref.Link |OD | Zoznam Nomenklatúra AKO Ref | KDE | Ref.Name PODOBNÉ ako "%"

Niekedy nastane situácia, keď v 1C 8.3 alebo 8.2 musíte urobiť výber, napríklad z adresára všetkých prvkov, ktoré majú v názve slovo „glazúra“. Alebo z adresára vyberte všetkých dodávateľov, ktorých priezviská obsahujú slovo „Ivan“. Vo všeobecnosti skontrolujte nejakú hodnotu reťazca.

Na tento účel existuje operátor v dotazoch 1C 8.3 a 8.2 - „Podobné“. Používa sa v týchto podmienkach:

Získajte 267 video lekcií na 1C zadarmo:

Ako používať šablóny v dopytoch 1C?

Ak chcete vytvoriť podmienku výberu, musíte odovzdať určitú šablónu ako parameter. Na vytvorenie šablóny existujú takzvané symboly služieb.

Napríklad znak „%“ umožňuje ľubovoľnú sekvenciu ľubovoľných znakov:

Existujú aj ďalšie špeciálne znaky:

  • % (percento) – umožňuje ľubovoľnú sekvenciu ľubovoľných znakov;
  • _ (podčiarkovník) - ľubovoľný jeden znak;
  • […] – jeden ľubovoľný znak zo znakov uvedených v zátvorkách. Okrem výpisu znakov môžete použiť rozsahy. Príklad: a-o;
  • [^...] – to isté ako predchádzajúce, ale v opačnom poradí. Znak "^" znamená negáciu.