Použití je podobné požadavku 1s 8.2. Podobné jako podmínky dotazu

Přes všechny nedostatky je vyhledávání v textových polích stále jedním z nejoblíbenějších. Řetězcové datové typy najdeme všude - v tomto formátu lze ukládat jména, čísla účtů, adresy a další informace. V dotazech ve vestavěném jazyce 1C se pro pohodlí vývojářů používá speciální operátor „LIKE“. Jedná se o jeden z nejpoužívanějších příkazů, takže bez důkladné znalosti jeho syntaxe a možností bude programátor pracovat jen těžko.

Pomocí operátoru LIKE

Před použitím jakéhokoli operátoru v praxi musíte jasně pochopit jeho účel, místa použití a syntaxi. Účelem použití „LIKE“ v žádosti 1C je zkontrolovat splnění podmínky uvedené jako šablona. Vrácená hodnota je booleovský typ – true nebo false – označující, zda je zadaná podmínka pravdivá. Operátor LIKE lze v dotazu použít na několika místech:

  • V bloku podmínek, označeném klíčovým slovem „WHERE“;
  • V designu Choice When Then Other End;
  • Přímo ve výběrových polích, jako výsledek porovnávání polí.

Ověřovací syntaxe je vždy stejná a skládá se ze 3 odkazů. Vlevo je textová hodnota, která se kontroluje, poté samotný operátor „LIKE“ a vpravo je kontrolovaná šablona. Pro rychlé a snadné vytváření šablon existují speciální symboly, které usnadňují vývoj:

  1. „%“ je posloupnost libovolných znaků libovolné délky. Používá se k vyhledávání jednotlivých slov nebo čísel v řetězci;
  2. „_“ – libovolný jednotlivý znak. Určeno k označení přítomnosti jednoho znaku;
  3. „[...]“ je posloupnost znaků pro porovnání se znakem v řetězci. Pomocí takového vzoru se kontroluje shoda s kterýmkoli ze znaků uvedených v závorkách. Můžete také zadat rozsah čísel nebo písmen ([a-g], );
  4. „[^...]“ je opačný vzorec než předchozí. Zkontroluje se rozdíl mezi znakem uvedeným na řádku a znakem uvedeným v závorkách.

Pro lepší pochopení a pochopení principů tvorby správných šablon se podívejme na některé příklady, se kterými se v životě vývojářů často setkáváme. První je, když potřebujeme vybrat z nomenklaturního adresáře všechny položky, v jejichž názvech se vyskytuje slovo „CUTTER“. V tomto případě musíme v podmínkách dotazu použít LIKE:

SELECT Nomenclature.Name AS Name FROM Directory.Nomenklatura AS Nomenklatura WHERE Nomenklatura.Name PODOBNE "% CUTTER%"

Pokud odstraníme oba symboly „%“, dotaz zobrazí produkt, jehož název zcela odpovídá názvu uvedenému v uvozovkách. Pokud ponecháme šablonu „CUTTER%“ nebo „% CUTTER“, výsledkem bude seznam položek končící, respektive začínající danou kombinací znaků.


Podívejme se na problém, který může zmást začínající programátory, kteří neznají syntaxi dotazů. Řekněme, že potřebujete najít všechny položky, které mají ve svém názvu symbol „%“. Zejména pro případy, kdy potřebujete vyhledat vyhrazené znaky, existuje operátor „speciální znak“. #,\,/,~ a další znaky lze použít jako speciální znak, po kterém budou všechny vyhrazené znaky jednoduše označovat znak.

SELECT Nomenclature.Name AS Name FROM Directory.Nomenklatura AS Nomenklatura WHERE Nomenklatura.Name PODOBNE "%#%" SPECIÁLNÍ CHARAKTER "#"

Pokud potřebujete použít parametr ve vyhledávání, pak se proměnná v dotazu s parametrem PODOBNÉ používá pomocí sčítání. Pamatujte, že parametr musí být typu řetězce, jinak jej budete muset v požadavku převést na řetězec. Jedná se o poměrně komplikovanou operaci a je lepší ji předem vyloučit.

SELECT Nomenclature.Name AS Name FROM Directory.Nomenklatura AS Nomenklatura WHERE Nomenklatura.Name PODOBNE "%" + &name + "%"

Funkce SIMILAR je použitelná ve všech verzích platformy počínaje 8 a vzhledem k její použitelnosti ji vývojáři 1C nebudou chtít měnit. Textové vyhledávání samozřejmě vždy závisí na přesnosti zadaného jména, ale stále zůstává jedním z nejběžnějších. V tomto ohledu musí profesionální vývojáři 1C prostudovat použití SIMILAR se všemi jeho nuancemi.

Operátor SIMILAR v dotazu kontroluje hodnoty řetězců z tabulek na podobnost se vzorem.
Používá se následovně: řetězec, který má být zkontrolován, je umístěn nalevo od tohoto operátoru a vzor je umístěn napravo.

Po kontrole vrátí True nebo False, podle toho se aktivně používá v podmínkách.
K vytvoření šablony se používají následující servisní znaky:

  • % (procento) - sekvence obsahující libovolný počet libovolných znaků
  • _ (podtržítko) - jeden libovolný znak
  • […] (jeden nebo více znaků v hranatých závorkách) – jakýkoli jednotlivý znak uvedený v hranatých závorkách
    Kromě různých symbolů můžete také použít rozsahy, například a-z(A-z), což znamená přítomnost libovolného symbolu zahrnutého v rozsahu, včetně konců rozsahu.
  • [^...] (v hranatých závorkách znak negace následovaný jedním nebo více znaky) – jakýkoli jednotlivý znak jiný než ty, které jsou uvedeny za znakem negace

Zbývající symboly jsou použity pro zamýšlený účel.
Pokud je nutné přenést jeden z výše uvedených servisních znaků jako symbol, pak mu musí předcházet<Спецсимвол>. Moje maličkost<Спецсимвол>(jakýkoli vhodný znak) je definován ve stejném příkazu za klíčovým slovem SPECIAL CHARACTER.
Například vzor „%ABV[abvg]\_abv%“ SPECIÁLNÍ ZNAK „\“ znamená podřetězec sestávající z posloupnosti znaků:
písmena A; písmena B; písmena B; jedna číslice; jedno z písmen a, b, c nebo d; podtržítko; písmena a; písmena b; písmena v.
Navíc této sekvenci může předcházet libovolná sada znaků.

Postup Vyberte AgreementContainingInNameText(mText)
//V požadavku použijeme šablonu jako "%" + mText + "%" Požadavek = Nový požadavek; Query.SetParameter("Name", "%" + Text + "%"); Request.Text = "SELECT | Dohody. Odkaz, | Dohody. Vlastník | FROM | Adresář. Smlouvy protistran AS Dohody | | KDE | Dohody. Jméno PODOBNÉ & Název"; Výsledek = Query.Run(); Selection = Result.Select(); Report("Dohody obsahující v názvu: " + mText + " mají následující protistrany"); Zatímco Selection.Next() Cycle Report("Protistrana: " + Selection.Owner + "; Smlouva: " + Selection. Link EndIf; EndProcedure

Podívejme se na účel a použití podmíněného operátoru LIKE (angl. LIKE) v dotazovacím jazyce 1C v příkladech.

Rychlý průchod

Účel

Zkontrolujte, zda hodnota řetězce v požadavku odpovídá zadanému vzoru – vrátí logickou hodnotu (TRUE nebo FALSE).

  • Kontrola je nezávislá na velikosti písmen.
  • Dotaz používá indexy tabulek – nesouvisí s indexy fulltextového vyhledávání.
  • Dokončení u velkých stolů může trvat dlouho.
  • Řetězce neomezené délky by měly být převedeny pomocí funkce SUBSTRING

Místa použití

  • V podmínkách provozovatele WHERE
  • V návrhových podmínkách VOLBA KDY<>PAK "" JINAK "" KONEC
  • V polích výběru (například: Název LIKE &ParametrPodobný jako StringSuitable)

Popis syntaxe operátoru LIKE

Parametr operátora musí být řetězec: může být zadán jako konstanta nebo předán jako parametr požadavku.

Níže uvedené literály (masky) lze použít společně nebo samostatně.

Přesná specifikace řetězce

VYBERTE prvních 10
Klíče. Jméno
Z
Directory.Keys AS klíče
KDE
Keys.Name PODOBNÉ až "1" // Ekvivalentní Keys.Name ="1"

Výsledek:

% je doslovný význam libovolného počtu libovolných znaků

VYBERTE prvních 10
Klíče. Jméno
Z
Directory.Keys AS klíče
KDE
Klíče. Název LIKE "%"

Výsledek: libovolných 10 položek

_ (podtržítko): doslovná shoda s libovolným jedním znakem

Příklad č. 1:

VYBERTE prvních 10
Klíče. Jméno
Z
Directory.Keys AS klíče
KDE
Keys.Name LIKE "_"

Příklad č. 2: počínaje libovolným znakem, následovaným „1“ a poté libovolnými znaky

VYBERTE prvních 10
Klíče. Jméno
Z
Directory.Keys AS klíče
KDE
Klíče. Název PODOBNÝ až „_1 %“

Výsledek:

(jeden nebo více znaků v hranatých závorkách)

  • Každý literál, který odpovídá libovolnému znaku, se používá jako NEBO.
    Je přijatelné zadat rozsah, například a-z,0-5, což znamená libovolný znak ze zadaného rozsahu

Příklad

VYBERTE prvních 10
Klíče. Jméno
Z
Directory.Keys AS klíče
KDE
Klíče. Název PODOBNÝ jako "[l] %"

Výsledek: 10 začínající na "l" nebo "z"

Příklad: počínaje 5,6,7

VYBERTE prvních 10
Klíče. Jméno
Z
Directory.Keys AS klíče
KDE
Klíče. Název LIKE "%"

Výsledek:

[^] (v hranatých závorkách je znak escape ^ následovaný jedním nebo více znaky)

Ekvivalent libovolného znaku (_) kromě těch, které jsou specifikovány ()

Příklad

VYBERTE prvních 10
Klíče. Jméno
Z
Directory.Keys AS klíče
KDE
Keys.Name PODOBNÉ jako "8.[^012]%"//nezahrnují 8.0,8.1,8.2

Výsledek: vše začíná na "8." kromě uvedených

SPECIÁLNÍ CHARACTER - příkaz pro specifikaci výše registrovaných znaků v požadavku

Jako symbol služby je přijatelné použít alespoň: #,~,/,\

Příklad:

VYBERTE prvních 10
Klíče. Jméno
Z
Directory.Keys AS klíče
KDE
Keys. Name LIKE "#_" SPECIÁLNÍ CHARAKTER "#"

Výsledek:

Použitelnost na platformách

Nesprávné parametry LIKE<>

  • Je předán parametr neřetězcového typu: například číslo 1 namísto řetězce „1“
  • Pole neřetězcového typu je porovnáno s platnou maskou (například odkaz) nebo při připojování není hodnota kontrolována na IsNUL

Věnujte pozornost textu chyby, kde je otázka zobrazena:

Klíče.Název PODOBNÉ<>&L

Operátor JAKO umožňuje porovnat data typu řetězce v dotazu, který je umístěn nalevo od operátoru, s daty typu řetězce, který se nachází napravo od operátoru. Výsledek porovnání je vyhodnocen jako True nebo False, takže srovnání lze použít jako podmínku.

Pro operátora JAKO Existují speciální servisní znaky, které nejsou vnímány jako řetězec:

  • Symbol procenta "%": označuje přítomnost libovolného počtu libovolných znaků v řetězci
  • "[...]" jeden nebo více znaků v hranatých závorkách: označuje přítomnost kteréhokoli (jednoho) z uvedených znaků. Lze také zadat rozsah znaků (např.
  • "_" podtržítko: označuje přítomnost libovolného znaku
  • Negační znak „[^...]“: označuje přítomnost jakéhokoli jednotlivého znaku jiného než těch, které jsou uvedeny v hranatých závorkách
Pokud potřebujete zadat jeden z výše uvedených speciálních znaků pro porovnání, musíte použít klíčové slovo „SPECIÁLNÍ SYMBOL“

Vlastnosti použití s ​​různými DBMS

IBM DB2"Napravo od operátoru PODOBNÉ lze umístit pouze parametr. Jedinými zástupnými znaky jsou "_" (podtržítko znamená libovolný znak) a "%" (procento znamená posloupnost libovolných znaků).
V případě použití DBMS " PostgreSQL"nebo" Databáze Oracle"speciální znaky "hranaté závorky [...]" jsou akceptovány pouze v případě, že jsou uvedeny v textu v požadavku a NEJSOU předány jako parametr požadavku.

V databázi souborů tak budou speciální znaky vždy vnímány stejně a odlišně v závislosti na použitém DBMS ve verzi klient-server.

Příklad: vyberte produkty obsahující v názvu symbol "%".

VYBERTE | Ref.Link |OD | Katalog Nomenklatura JAK Ref | KDE | Ref.Name LIKE "%\%" SPECIÁLNÍ CHARAKTER "\"

Příklad: vyberte produkty, jejichž názvy začínají slovem „Tank“

VYBERTE | Ref.Link |OD | Katalog Nomenklatura JAK Ref | KDE | Ref.Name PODOBNÉ jako "Bak%"

Příklad: vyberte produkty, jejichž názvy končí číslem

VYBERTE | Ref.Link |OD | Katalog Nomenklatura JAK Ref | KDE | Ref.Name PODOBNÉ jako "%"

Někdy nastane situace, kdy v 1C 8.3 nebo 8.2 potřebujete provést výběr, například z adresáře všech prvků, které mají ve svém názvu slovo „glaze“. Nebo z adresáře vyberte všechny dodavatele, jejichž příjmení obsahuje slovo „Ivan“. Obecně zkontrolujte nějakou hodnotu řetězce.

Pro tento účel existuje operátor v dotazech 1C 8.3 a 8.2 - „Podobné“. Používá se za následujících podmínek:

Získejte 267 videolekcí na 1C zdarma:

Jak používat šablony v dotazech 1C?

Chcete-li vygenerovat podmínku výběru, musíte předat určitou šablonu jako parametr. Pro vytvoření šablony existují tzv. servisní symboly.

Například znak „%“ umožňuje libovolnou sekvenci libovolných znaků:

Existují další speciální znaky:

  • % (procento) - umožňuje libovolnou sekvenci libovolných znaků;
  • _ (podtržítko) - libovolný jednotlivý znak;
  • […] – jeden libovolný znak ze znaků uvedených v závorkách. Kromě výpisu znaků můžete použít rozsahy. Příklad: a-o;
  • [^...] – stejně jako předchozí, ale obráceně. Znak "^" znamená negaci.