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

Online Jirka

  • Plnoletý
  • ***
  • Příspěvků: 135
  • Karma: 8
    • Verze Delphi: XE2
Re:Firebird - Select, hledání bez ohledu na diakritiku
« Odpověď #15 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ě :-) )

Online Delfin

  • Padawan
  • ******
  • Příspěvků: 1816
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Firebird - Select, hledání bez ohledu na diakritiku
« Odpověď #16 kdy: 08-08-2018, 18:17:26 »
IMHO
Pole kde vyhledávím podle diakritiky (např. název produktu) nejsou ve většině případů stejně zaindexované (alespoň u mě :-) )

Pro tyto pripady se pouzivaji fulltext search moduly. Napr. PostgreSQL ma kvalitni fulltext search modul. Ale to uz je jina liga ;)
« Poslední změna: 08-08-2018, 18:46:03 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

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,' ', ''))))