I can't figure out what the underscore character does in an SQLite like
statement.
The wildcard character, %
, is probably the same as in most other SQL databases.
So, what does the _
character do?
I can't figure out what the underscore character does in an SQLite like
statement.
The wildcard character, %
, is probably the same as in most other SQL databases.
So, what does the _
character do?
The underscore is also the same as in most other SQL databases and matches any single character (i.e. it is the same as .
in a regular expression). From the fine manual:
An underscore ("_") in the LIKE pattern matches any single character in the string.
For example:
-- The '_' matches the single 'c'
sqlite> select 'pancakes' like 'pan_akes';
1
-- This would need '__' to match the 'ca', only one '_' fails.
sqlite> select 'pancakes' like 'pan_kes';
0
-- '___' also fails, one too many '_'.
sqlite> select 'pancakes' like 'pan___kes';
0
And just to make sure the results make sense: SQLite uses zero and one for booleans.
It is standard SQL that in LIKE
expressions:
%
matches any sequence of characters, including an empty one. It is equivalent to .*
in a regular expression._
matches a single character. It is equivalent to .
in a regular expression.You can choose a character for escaping %
, _
and itself itself with:
... WHERE expr LIKE 'a_b%c\\d\%\_' ESCAPE '\'
This will match a×b×××c\d%_
or a×bc\d%_
but not abc\d%_
nor a×b×××cd%_
.
Additionnally with SQLite you have the GLOB
keyword which behaves exactly the same way, except that %
becomes *
and _
becomes ?
.
GLOB
is not exactly the same as LIKE
but with different symbols. It's always case-sensitive, doesn't allow ESCAPE
, and also supports character classes and ranges. –
Quandary The underscore is also the same as in most other SQL databases and matches any single character (i.e. it is the same as .
in a regular expression). From the fine manual:
An underscore ("_") in the LIKE pattern matches any single character in the string.
For example:
-- The '_' matches the single 'c'
sqlite> select 'pancakes' like 'pan_akes';
1
-- This would need '__' to match the 'ca', only one '_' fails.
sqlite> select 'pancakes' like 'pan_kes';
0
-- '___' also fails, one too many '_'.
sqlite> select 'pancakes' like 'pan___kes';
0
And just to make sure the results make sense: SQLite uses zero and one for booleans.
Addendum to @Benoit's answer:
The ESCAPE
applies to the most recent LIKE
expression, not all LIKE
expressions. To escape all you must use ESCAPE
multiple times, such as below.
WHERE foo LIKE '%bar^%%' ESCAPE '^' AND foo LIKE '%baz^_%' ESCAPE '^'
This predicate matches values of foo
which contain bar%, or baz plus any character.
For the record, I use in XCode/Objective-C environment, '\' doesn't work. Use anything else instead...
C-style escapes using the backslash character are not supported because they are not standard SQL (https://www.sqlite.org/lang_expr.html)
© 2022 - 2024 — McMap. All rights reserved.