Autor Téma: Firebird - Select, hledání bez ohledu na diakritiku  (Přečteno 4498 krát)

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1429
  • Karma: 34
    • Pepak.net
Re:Firebird - Select, hledání bez ohledu na diakritiku
« Odpověď #15 kdy: 07-08-2018, 18:58:22 »
Oprav mě, jestli se mýlím, ale podle mě když COLLATION zadáš za běhu, tak se nebudou moci použít indexy.

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 146
  • Karma: 8
    • Verze Delphi: XE2
Re:Firebird - Select, hledání bez ohledu na diakritiku
« Odpověď #16 kdy: 08-08-2018, 16:53:21 »
IMHO
Pole kde vyhledávím podle diakritiky (např. název produktu) nejsou ve většině případů stejně zaindexované (alespoň u mě :-) )

Offline Palino

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 0
    • Verze Delphi: 7, XE, Seattle
Re:Firebird - Select, hledání bez ohledu na diakritiku
« Odpověď #17 kdy: 21-06-2019, 14:19:54 »
Pozdravujem vsetkych,

len pre zaujimavost aj ked takto neskoro: firebird umoznuje definovat indexy typu  COMPUTED BY definovane vyrazom napr. pre znakovu sadu WIN1250:

CREATE INDEX ADRESAR_IDX8 ON ADRESAR COMPUTED BY (nazov collate PXW_SLOV);
CREATE INDEX ADRESAR_IDX9 ON ADRESAR COMPUTED BY (nazov collate WIN_CZ_CI_AI);

ak zadate podmienku v tvare zadaneho vyrazu pouzije prislusny index :

select * from adresar a where a.nazov collate pxw_slov = 'peter' collate pxw_slov
select * from  adresar a where a.nazov collate WIN_CZ_CI_AI = 'peter' collate WIN_CZ_CI_AI


taktiez dobre vyuzitelne na hladanie napr cisel ktore maju byt pri porovnani orezanena zaciatocne nuly:

CREATE INDEX ADRESAR_IDX7 ON ADRESAR COMPUTED BY (trim (leading '0' from (upper(replace(ICO,' ', '')))));

select * from adresar a where trim (leading '0' from (upper(replace(a. ICO,' ', ''))))  = trim (leading '0' from (upper(replace(:ICO,' ', ''))))