所以我有以下查询:
select username from users where username like 'aDam%'
,但是这里的问题是它不区分大小写。此查询还将获得名为“ adam%”,“ Adam%”等的用户。
问题:如何仅获取“ aDam%”(使查询区分大小写)?
注意:%运算符在这里很重要。
答案 0 :(得分:4)
在运行查询之前,您可以将case_sensitive_like编译指示设置为ON。
PRAGMA case_sensitive_like =布尔值;
LIKE运算符的默认行为是忽略ASCII的大小写 字符。因此,默认情况下,“ a”(如“ A”)为true。的 case_sensitive_like杂注会安装新的应用程序定义的LIKE 区分大小写或不区分大小写的函数,具体取决于 case_sensitive_like编译指示的值。当case_sensitive_like为 禁用,表示默认的LIKE行为。什么时候 启用case_sensitive_like,大小写会变大。因此对于 例如,“ a”(如“ A”)为假,但“ a”(如“ a”)仍为真。
此编译指示使用sqlite3_create_function()重载LIKE和 GLOB函数,可能会覆盖以前的LIKE实现 并由应用程序注册了GLOB。这种实用主义只会改变 SQL LIKE运算符的行为。它不会改变行为 sqlite3_strlike()C语言接口,通常是这种情况 不敏感。
然后按原样运行查询。
PRAGMA case_sensitive_like=ON;
select username from users where username like 'aDam%';
在Sql Fiddle上测试here。
答案 1 :(得分:2)
由于Like不区分大小写,因此无法单独工作,但一种解决方法是将其与SUBSTR
函数一起使用
select username
from users
where username like 'aDam%'
and substr(username,1,4) = 'aDam'