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使用零和布尔值 。

LIKEexpression式中是标准的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适用于最近的LIKEexpression式,而不是所有的LIKEexpression式。 为了逃避所有你必须多次使用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