2014-05-07 79 views
1

我在包含基因名的表中有一列。基因名称的例子是dnaA,BN_001,BN_0023等...SQL LIKE语句不起作用

我想要所有基因名称不包含下划线。我使用的声明是这样的:

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

但是,这不会返回正确的基因名称。问题是什么?我使用MYSQL作为RDBMS。

谢谢

回答

1

问题是_在任何单个字符的疗法like声明的占位符。

相反,你可以使用

SELECT Gene from cds 
WHERE instr(Gene, '_') = 0 
1
SELECT Gene from cds WHERE Gene NOT LIKE '%\_%'; 
1

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

1

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

有了这样你可以在模式中使用以下两种通配符。

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

对于这一点,只是使用像locate()功能:

where locate('_', gene) = 0 
1

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

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

你应该写

LIKE '%\_%' ESCAPE '\' 

因为_意味着SQL的东西,所以你必须通过\

1

使用此'%\_%'

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

Working Fiddle

摆脱这种