При розробці бази імен з використанням SQLite3 вилізла одна маленька, але неприємна річ -- при сортуванні за іменами/прізвищами порядок виявився досить диким: на початку списку йшли люди з прізвищами на "Є", "І", "Ї". Потім йшли на "А" і далі, як і повинно бути, а в самому кінці, після "Я" тулилася нещасна літера "Ґ".
Спочатку я намагався вирішити цю проблему шляхом:
SELECT icu_load_collation('uk_UA', 'UKRAINIAN');але проблема виявилася в тому, що це вимагало додаткової мороки з нестандартною збіркою sqlite3.dll/sqlite3.so.Також вилазили інші глюки.
Спочатку я залишив це як є, але оце вирішив все-таки побороти цю проблему.
Рішення (aka "милиця" aka "костиль").
SELECT name, CASEВиглядає незвично, але працює як годинник! Мені достатньо було правильного сортування по першим буквам. Інакше можна аналогічно застосувати SQLite-функцію REPLACE
WHEN SUBSTR(name,1,1) LIKE '%Ґ%' OR SUBSTR(name,1,1) LIKE '%ґ%' THEN 'Гя' || SUBSTR (name, 2)
WHEN SUBSTR(name,1,1) LIKE '%Є%' OR SUBSTR(name,1,1) LIKE '%є%' THEN 'Ея' || SUBSTR (name, 2)
WHEN SUBSTR(name,1,1) LIKE '%І%' OR SUBSTR(name,1,1) LIKE '%і%' THEN 'Ию' || SUBSTR (name, 2)
WHEN SUBSTR(name,1,1) LIKE '%Ї%' OR SUBSTR(name,1,1) LIKE '%ї%' THEN 'Ия' || SUBSTR (name, 2)
ELSE name END AS SortField
FROM grace_people_c ORDER BY SortField ASC
От що значить пару годин порухати мізками і вдумливо покурити мануали!
Немає коментарів:
Дописати коментар