区分大小写搜索

时间:2013-06-19 06:13:46

标签: sql sqlite search wildcard nspredicate

我正在开发一个使用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];

有没有解决方案?

3 个答案:

答案 0 :(得分:6)

SELECT * FROM a WHERE name glob 'A*'

看sql小提琴

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

答案 1 :(得分: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

答案 2 :(得分:-1)

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

SQLite case sensitive search with collate nocase field

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

http://www.sqlite.org/lang_expr.html#collateop

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

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