iOS - Как выполнить поиск без учета диакритических знаков с помощью SQLite.swift?

Я работаю с SQLite.swift. Есть ли способ выполнить нечувствительный к диакритическим знакам запрос LIKE в SQLite? Например, этот запрос:

SELECT * FROM users WHERE name LIKE "thu%"

вернется:

thử
thu
thư
etc.

person TomSawyer    schedule 02.12.2015    source источник


Ответы (1)


Из документации:

Мы можем создавать пользовательские последовательности сопоставления, вызывая createCollation при подключении к базе данных.

try db.createCollation("NODIACRITIC") { lhs, rhs in
    return lhs.compare(rhs, options: .DiacriticInsensitiveSearch)
}

Мы можем ссылаться на пользовательское сопоставление, используя элемент Custom перечисления Collation.

restaurants.order(collate(.Custom("NODIACRITIC"), name))
// SELECT * FROM "restaurants" ORDER BY "name" COLLATE "NODIACRITIC"

В вашем случае вы можете выполнить следующий запрос впоследствии:

SELECT * FROM users WHERE name COLLATE NODIACRITIC LIKE 'thu%'
person stephencelis    schedule 02.12.2015
comment
Я добавил ваш код и выполнил запрос, но не сработал. Я должен поставить этот код сразу после подключения к базе данных? - person TomSawyer; 02.12.2015
comment
Я пробовал с другим запросом с вашим синтаксисом, но получил эту ошибку: Use of unresolved identifier 'collate' - person TomSawyer; 03.12.2015
comment
У вас есть пример, как я могу заставить его работать? Я застрял с этой проблемой в течение дня. - person TomSawyer; 03.12.2015