Porovnávání čísel ve výběrech

V nové verzi MERGADA (nasazení dne 15.02.2023) je opravena chyba ohledně porovnávání čísel ve výběrech, která může ovlivnit chování aktuálních výběrů. V tomto příspěvku si přiblížíme, jak to funguje. Po celou dobu budeme pracovat s ukázkovými daty:

1. <SHOP>
2.   <SHOPITEM>
3.     <ITEM_ID>12</ITEM_ID>
4.   </SHOPITEM>
5.   <SHOPITEM>
6.     <ITEM_ID>00012</ITEM_ID>
7.   </SHOPITEM>
8.   <SHOPITEM>
9.     <ITEM_ID>AB012</ITEM_ID>
10.   </SHOPITEM>
11.   <SHOPITEM>
12.     <ITEM_ID>12 Kč</ITEM_ID>
13.   </SHOPITEM>
14.   <SHOPITEM>
15.     <ITEM_ID>AB_12</ITEM_ID>
16.   </SHOPITEM>
17.   <SHOPITEM>
18.     <ITEM_ID>AB</ITEM_ID>
19.   </SHOPITEM>
21.   <SHOPITEM>
22.     <ITEM_ID>12.00</ITEM_ID>
23.   </SHOPITEM>
24.   <SHOPITEM>
25.     <ITEM_ID>012AB</ITEM_ID>
26.   </SHOPITEM>
24. </SHOP>

Jak funguje porovnávání čísel ve vyhodnocování výběrů?

Popis fungování v této sekci platí pro všechny operátory a výběry (tedy nejen pro operátor IN).

Obecné fungování má 2 principy:

  1. Všechno (včetně čísel), co je napsané v uvozovkách, se vyhodnocuje jako text, takže v hledaných hodnotách se hledá přesná shoda textu. Např. pokud máme výběr

    image

    najde nám to produkty s ITEM_ID 12, AB a 12.00 (odpovídající řádky č. 3, 18 a 22).

    image

  2. Čísla, která nejsou napsaná v uvozovkách, se vyhodnocují jako čísla, takže v hledaných hodnotách se nehledá přesná shoda textu, ale hodnoty jako 00012, 12.00 nebo12 Kč se vezmou jako shoda s číslem 12. Např. pokud máme výběr

    image

    najde nám to produkty s ITEM_ID 12, 00012, 12 Kč, AB, 12.00 a 012AB (odpovídající řádky č. 3, 6, 12, 18, 22 a 25).

    image

Operátor IN - přidané chování

:warning: Nově jde v operátoru IN psát hodnoty bez uvozovek a hodnoty s uvozovkami kombinovaně zároveň v rámci jednoho operátoru IN a výběr bude funkční (dříve nešlo).

image

Další příklady

Zadaný dotaz Výsledek - nalezené hodnoty mající shodu
ITEM_ID = 12 12 , 00012 , 12 Kč , 12.00, 012AB
ITEM_ID IN (12) 12 , 00012 , 12 Kč , 12.00, 012AB
ITEM_ID IN (00012; "AB") 12, 00012 , 12 Kč , AB, 12.00, 012AB
ITEM_ID = "12" 12
ITEM_ID IN ("12") 12
ITEM_ID IN ("12.00") 12.00
ITEM_ID IN ("00012"; "AB") 00012, AB
2 Likes