SQL LIKE语句不起作用

时间:2014-05-07 10:59:20

标签: mysql sql

我在表格中有一个包含基因名称的列。基因名称的例子是dnaA,BN_001,BN_0023等......

我希望所有基因名称都不包含下划线。我用过的陈述是这样的:

    SELECT Gene from cds WHERE Gene NOT LIKE '%_%';

然而,这并没有返回正确的基因名称。问题是什么?我使用MYSQL作为RDBMS。

谢谢

7 个答案:

答案 0 :(得分:2)

你应该写

LIKE '%\_%' ESCAPE '\'

因为_在SQL中意味着什么,所以你必须通过\

来逃避它

答案 1 :(得分:1)

问题是_是任何单个字符的like语句中的占位符。

相反,您可以使用

SELECT Gene from cds 
WHERE instr(Gene, '_') = 0

答案 2 :(得分:1)

SELECT Gene from cds WHERE Gene NOT LIKE '%\_%';

答案 3 :(得分:1)

_LIKE运算符的特殊字符。你必须逃避它,请尝试Gene NOT LIKE '%\_%';

答案 4 :(得分:1)

在MySQL中,下划线表示like模式中的任何单个字符。您可以阅读documentation,但这里是相关部分:

  
    

使用LIKE,您可以在模式中使用以下两个通配符。

  
Character   Description
%   Matches any number of characters, even zero characters
_   Matches exactly one character

为此,只需使用locate()

等功能
where locate('_', gene) = 0

答案 5 :(得分:1)

你需要逃避下划线,MySQL似乎支持标准SQL' ESCAPE

SELECT Gene from cds WHERE Gene NOT LIKE '%\_%' ESCAPE '\';

答案 6 :(得分:1)

使用此'%\_%'

SELECT Gene from cds WHERE Gene NOT LIKE '%\_%';

Working Fiddle