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 performs case-insensitive substring matches if the collation for the expression and pattern is 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.
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.
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%'
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With