区分大小写,例如select SQLite

时间:2018-09-30 13:38:24

标签: sql sqlite case-sensitive

所以我有以下查询:

select username from users where username like 'aDam%'

,但是这里的问题是它不区分大小写。此查询还将获得名为“ adam%”,“ Adam%”等的用户。

问题:如何仅获取“ aDam%”(使查询区分大小写)?

注意:%运算符在这里很重要。

2 个答案:

答案 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'