Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Case sensitive and insensitive like in SQLite

In SQLite it is possible to change the case sensitive behaviour of 'LIKE' by using the commands:

PRAGMA case_sensitive_like=ON; PRAGMA case_sensitive_like=OFF; 

However in my situation I would like to execute a query, part of which is case sensitive and part of which isn't. For example:

SELECT * FROM mytable WHERE caseSensitiveField like 'test%' AND caseInsensitiveField like 'g2%' 

Is this possible?

like image 436
Richard Williams Avatar asked Mar 18 '13 15:03

Richard Williams


People also ask

Is like function in SQL case sensitive?

LIKE performs case-insensitive substring matches if the collation for the expression and pattern is case-insensitive.

How do I make SQLite query case insensitive?

To be case insensitive on firstname , write this: select * from tbl where firstname='john' COLLATE NOCASE and lastname='doe' . It's specific to that one column, not the entire where clause.

Are SQLite tables case sensitive?

By default, the SQLite LIKE operator is case-insensitive for ASCII characters. This means it will match uppercase and lowercase characters, regardless of which case you use in your pattern.


2 Answers

You can use the UPPER keyword on your case insensitive field then upper-case your like statement. e.g.

SELECT * FROM mytable  WHERE caseSensitiveField like 'test%'  AND UPPER(caseInsensitiveField) like 'G2%' 
like image 115
rbedger Avatar answered Oct 08 '22 19:10

rbedger


Use plain comparisons, which are case sensitive by default (unless you have declared the column COLLATE NOCASE):

SELECT * FROM mytable  WHERE caseSensitiveField >= 'test'   AND caseSensitiveField <  'tesu'   AND caseInsensitiveField LIKE 'g2%' 

This works only if the original LIKE is searching for a prefix, but allows using an index.

like image 25
CL. Avatar answered Oct 08 '22 17:10

CL.