SQLite像%和_
我无法弄清楚下划线字符在SQLite语句中的作用。 通配符%
可能与大多数其他SQL数据库相同。
那么该死的angular色呢?
下划线也与大多数其他SQL数据库中的相同,并匹配任何单个字符(即与正则expression式中的。)相同。 从精美的手册 :
LIKE模式中的下划线(“_”)与string中的任何单个字符匹配。
例如:
-- 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
只是为了确保结果是有意义的:SQLite使用零和布尔值 。
在LIKE
expression式中是标准的SQL:
-
%
匹配任何字符序列,包括空字符。 它等同于正则expression式中的.*
。 -
_
匹配单个字符。 这相当于.
在正则expression式中。 -
你可以select一个字符转义
%
,_
本身本身:... WHERE expr LIKE 'a_b%c\\d\%\_' ESCAPE '\'
这将匹配
a×b×××c\d%_
或a×bc\d%_
但不是abc\d%_
也不a×b×××cd%_
。
另外用SQLite你有GLOB
关键字的行为方式完全一样,只是%
变成*
和_
变成了?
。
附件@ Benoit的答案:
ESCAPE
适用于最近的LIKE
expression式,而不是所有的LIKE
expression式。 为了逃避所有你必须多次使用ESCAPE
,比如下面。
WHERE foo LIKE '%bar^%%' ESCAPE '^' AND foo LIKE '%baz^_%' ESCAPE '^'
这个谓词匹配包含bar%的foo
值,或者baz加上任何字符。
为了logging,我在XCode / Objective-C环境中使用“\”不起作用。 改用其他的东西
不支持使用反斜线字符的C样式转义,因为它们不是标准的SQL( https://www.sqlite.org/lang_expr.html )