0

我正在开发一个使用 Sqlite 作为后端的 iphone 应用程序。我想在我的应用程序中实现搜索功能,为此我使用了 sql 查询。我想以区分大小写的方式实现搜索。我使用了以下查询或获取数据。

SELECT data FROM table where data LIKE 'A%' ORDER BY ID ASC

由于 Sqlite 不区分大小写,因此我正在获取以“a”和“A”开头的数据。满足我要求的替代选项是在显示之前过滤我的代码中获取的内容。我为此尝试了 NSPredicate ,但这也适用于不区分大小写的方式。这是我的代码..

NSPredicate *pred = [NSPredicate predicateWithFormat:@"self BEGINSWITH[c]  %@",[NSString stringWithFormat:@"%c",[filter characterAtIndex:i]]];
NSArray *arr = [arrayComponent filteredArrayUsingPredicate:pred];

有什么解决方案吗?

4

3 回答 3

6
SELECT * FROM a WHERE name glob 'A*'

见 sql 小提琴

http://sqlfiddle.com/#!7/18215/1

于 2013-06-19T06:43:55.167 回答
1

我不确定您是否可以PRAGMA在您的环境中使用语句,但有一个选项如下:

PRAGMA case_sensitive_like = true;

PRAGMA 语句是 SQLite 特有的 SQL 扩展,用于修改 SQLite 库的操作。启用 case_sensitive_like 后,大小写变得重要。因此,例如,'a' LIKE 'A' 是假的,但 'a' LIKE 'a' 仍然是真的。

该文件在这里: http ://www.sqlite.org/pragma.html#pragma_case_sensitive_like

于 2013-06-19T06:33:02.473 回答
-1

找到另一个可能对您有帮助的答案:

使用 collat​​e nocase 字段的 SQLite 区分大小写搜索

简而言之,您需要使用以下COLLATE命令更改排序规则:

http://www.sqlite.org/lang_expr.html#collat​​eop

编辑试试这个(来自上面的其他帖子):

SELECT data FROM table where data LIKE 'A%' ORDER BY ID ASC COLLATE BINARY
于 2013-06-19T06:37:21.550 回答