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:
-
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
najde nám to produkty s ITEM_ID
12
,AB
a12.00
(odpovídající řádky č. 3, 18 a 22). -
Čí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ěrnajde nám to produkty s ITEM_ID
12
,00012
,12 Kč
,AB
,12.00
a012AB
(odpovídající řádky č. 3, 6, 12, 18, 22 a 25).
Operátor IN - přidané chování
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).
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 |