SQLite喜欢%和_

时间:2011-09-06 16:28:42

标签: sql sqlite sql-like

我无法弄清楚下划线字符在SQLite like语句中的作用。 通配符%可能与大多数其他SQL数据库中的相同。

那么该死的_角色做了什么?

4 个答案:

答案 0 :(得分:81)

LIKE表达式中的标准SQL:

  • %匹配任何字符序列,包括空字符。它相当于正则表达式中的.*
  • _匹配单个字符。它相当于正则表达式中的.
  • 您可以选择一个字符来转义%_及其本身:

    ... WHERE expr LIKE 'a_b%c\\d\%\_' ESCAPE '\'
    

    这将匹配a×b×××c\d%_a×bc\d%_但不匹配abc\d%_a×b×××cd%_

除了GLOB变为%*变为_之外,您还拥有?关键字的行为方式完全相同。

答案 1 :(得分:61)

下划线也与大多数其他SQL数据库中的相同,并匹配任何单个字符(即它与正则表达式中的.相同)。来自fine manual

  

LIKE模式中的下划线(" _")匹配字符串中的任何单个字符。

例如:

-- 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使用zero and one for booleans

答案 2 :(得分:8)

@Benoit答案的附录:

ESCAPE适用于最新的LIKE表达式,而非所有LIKE表达式。要逃避所有问题,您必须多次使用ESCAPE,例如下面的内容。

WHERE foo LIKE '%bar^%%' ESCAPE '^' AND foo LIKE '%baz^_%' ESCAPE '^'

此谓词与foo的值匹配,其中 bar% baz 加上任何字符。

答案 3 :(得分:0)

为了记录,我在XCode / Objective-C环境中使用,' \'不起作用。使用其他任何东西......

  

不支持使用反斜杠字符的C样式转义,因为它们不是标准SQL(https://www.sqlite.org/lang_expr.html