如何在sqlite3的WHERE子句中添加多个"NOT LIKE'%?%'?

Elm*_*mer 34 sql sqlite

我有一个sqlite3查询,如:

SELECT word FROM table WHERE word NOT LIKE '%a%';
Run Code Online (Sandbox Code Playgroud)

这将选择单词中不出现'a'的所有单词.这我可以完美地工作.问题是,如果我想进一步限制结果,不要在单词中的任何地方包含'b'.我正在想象这样的事情.

SELECT word FROM table WHERE word NOT IN ('%a%', '%b%', '%z%');
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,但这是个主意.只是添加一个AND条款是我想要避免的:

SELECT word FROM table WHERE word NOT LIKE '%a%' AND NOT LIKE '%b%';
Run Code Online (Sandbox Code Playgroud)

如果这是唯一的选择,那么我将不得不使用它,但我希望有别的东西.

lah*_*her 58

SELECT word FROM table WHERE word NOT LIKE '%a%' 
AND word NOT LIKE '%b%' 
AND word NOT LIKE '%c%';
Run Code Online (Sandbox Code Playgroud)

  • 哦,我刚刚犯了这个错误。感谢您发现真正的问题:**省略 LIKE 运算符的左操作数**。感谢OP减轻了尴尬。 (4认同)

mik*_*kel 15

如果您使用Sqlite的REGEXP支持(请参阅问题regexp python和sqlite的答案,如何做到这一点),那么您可以在一个子句中轻松完成:

SELECT word FROM table WHERE word NOT REGEXP '[abc]';
Run Code Online (Sandbox Code Playgroud)

  • 为了向不太熟悉正则表达式的用户澄清,它可能类似于 'table' NOT REGEXP 'word1|word2|word3|word4|word5';ETC (7认同)

小智 7

你错过了第二个陈述:1)不喜欢A,2)不喜欢B

SELECT word FROM table WHERE word NOT LIKE '%a%' AND word NOT LIKE '%b%'
Run Code Online (Sandbox Code Playgroud)


小智 7

这是一个选择命令

   FROM
    user
WHERE
    application_key = 'dsfdsfdjsfdsf'
        AND email NOT LIKE '%applozic.com'
        AND email NOT LIKE '%gmail.com'
        AND email NOT LIKE '%kommunicate.io';
Run Code Online (Sandbox Code Playgroud)

这个更新命令

 UPDATE user
    SET email = null
    WHERE application_key='dsfdsfdjsfdsf' and  email not like '%applozic.com' 
    and email not like '%gmail.com'  and email not like '%kommunicate.io';
Run Code Online (Sandbox Code Playgroud)