Podmínky podobné 1s. Podobné jako podmínky dotazu

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 | Adresář JAK KDE | Ref.Name LIKE "%\%" SPECIÁLNÍ CHARAKTER "\"

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

VYBERTE | Ref.Link |OD | Adresář JAK KDE | Ref.Name PODOBNÉ jako "Bak%"

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

VYBERTE | Ref.Link |OD | Adresář JAK KDE | Ref.Name PODOBNÉ jako "%"

43
NULL – chybějící hodnoty. Nezaměňovat s nulovou hodnotou! NULL není číslo, nerovná se mezera, prázdný odkaz nebo Nedefinováno. NULL je typotvorná hodnota, tzn. existuje typ NULL a jedna hodnota tohoto typu. NULA... 26
Pro generování a provádění dotazů do databázových tabulek na platformě 1C se používá speciální objekt programovacího jazyka Query. Tento objekt je vytvořen voláním konstrukce New Request. Pohodlná žádost... 18
Článek poskytuje užitečné techniky při práci s dotazy 1C v.8.2 a také informace, které nejsou o dotazovacím jazyce tak známé. Nesnažím se podat úplný popis jazyka dotazu, ale chci se zastavit pouze u... 12
Byl jsem postaven před úkol vybrat všechny platební doklady a seskupit je podle typu dokladu! Po prozkoumání všech ubytovacích a komunálních služeb a internetu jsem si uvědomil, že neexistuje snadný způsob, jak získat typ dokumentu v žádosti: (Musel jsem...

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 podmínkách návrhu 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 symbol vyloučení ^ 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 se porovnává s platnou maskou (například odkazem) nebo při připojování se hodnota nekontroluje na IsNUL

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

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

JAKO- Operátor pro kontrolu podobnosti řetězce se vzorem. Analog LIKE v SQL.
Operátor JAKO umožňuje porovnat hodnotu výrazu zadaného nalevo od něj s řetězcem vzoru zadaným napravo. Hodnota výrazu musí být typu string. Pokud se hodnota výrazu shoduje se vzorem, výsledek operátoru bude TRUE, jinak bude FALSE.
Následující znaky v řetězci šablony jsou servisní znaky a mají jiný význam než znak řetězce:
. % (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
Výčet může obsahovat rozsahy, například a-z, což znamená libovolný znak zahrnutý 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
Jakýkoli jiný symbol znamená sám sebe a nenese žádnou další zátěž.
Pokud je třeba jeden z uvedených znaků zapsat jako samotný, 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ů.

Příklady použití:
Kód 1C v 8.x Postup BankEndTextInput(prvek, text, hodnota, standardní zpracování)
StandardProcessing = False;
//Proveďte dotaz s hledáním pomocí vzoru jako "%" +<Текст введенный пользователм в поле ввода> + "%"
Žádost = Nová žádost;
Query.SetParameter("Name", "%" + Text + "%");
Query.Text = "VYBRAT
| Banks.Link
|OD
| Adresář.Banky JAK Banky
| KDE
| Banks.Name PODOBNÉ &Name";

Výsledek = Query.Run();
Selection = Result.Select();
If Result.Empty() Then
//Nic nalezeno. Zde můžete zobrazit zprávu nebo udělat něco jiného :)
v opačném případě
//Získejte výsledky
tzResults = Result.Unload();
//Připravte seznam hodnot, které budou obsahovat nalezené prvky.
Hodnota = Nový seznam hodnot();
Value.LoadValues(tzResults.UnloadColumn("Odkaz"));
endIf;
Konec procedury

Je nutné, aby „Výchozí smlouvy“ obsahovaly pouze názvy Hlavní smlouvy atd.:
Kód 1C v 8.x Volba
Je-li Název PODOBNÝ „Číslo smlouvy %“, pak „Smlouva s číslem“ // Vhodný je jakýkoli řádek začínající „Č. smlouvy“.
Když je název PODOBNÝ jako "Hlavní dohoda%[^А-яЁе"+Symbol(33)+"-"+Symbol(126)+"№"""+Symboly.PS+Symboly.Tab+Symboly.PF+Symboly .NPP+ Symbols.VTab+"]%" potom "Výchozí smlouvy" // Vhodný je jakýkoli řádek začínající na "Hlavní smlouva"
Jinak "jiné"
Konec jako druh smlouvy

Informace převzaté z webu

Přes všechny nedostatky je vyhledávání textových polí 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 pro programátora obtížné pracovat.

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 dotazu. Ř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.