SQLite喜欢%和_

Fra*_*isc 56 sql sqlite sql-like

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

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

Ben*_*oit 83

它是LIKE表达式中的标准SQL :

  • %匹配任何字符序列,包括空字符.它相当于.*正则表达式.
  • _匹配单个字符.它相当于.正则表达式.
  • 你可以选择一个逃脱的角色%,_它本身就是:

    ... WHERE expr LIKE 'a_b%c\\d\%\_' ESCAPE '\'
    
    Run Code Online (Sandbox Code Playgroud)

    这将匹配a×b×××c\d%_a×bc\d%_而不是abc\d%_也不a×b×××cd%_.

另外,与SQLite一起使用的GLOB关键字行为完全相同,除了%变为*_变为?.


mu *_*ort 62

下划线也与大多数其他SQL数据库中的相同,并匹配任何单个字符(即它与.正则表达式中的相同).从精细手册:

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
Run Code Online (Sandbox Code Playgroud)

并且只是为了确保结果有意义:SQLite使用0和1来表示布尔值.


Duc*_*tro 9

@Benoit回答的附录:

ESCAPE适用于最近的LIKE表现,并不是所有的LIKE表情.要逃避所有,你必须ESCAPE多次使用,如下所示.

WHERE foo LIKE '%bar^%%' ESCAPE '^' AND foo LIKE '%baz^_%' ESCAPE '^'
Run Code Online (Sandbox Code Playgroud)

此谓词匹配的值foo包含bar%,或baz加上任何字符.