我在包含基因名的表中有一列。基因名称的例子是dnaA,BN_001,BN_0023等...SQL LIKE语句不起作用
我想要所有基因名称不包含下划线。我使用的声明是这样的:
SELECT Gene from cds WHERE Gene NOT LIKE '%_%';
但是,这不会返回正确的基因名称。问题是什么?我使用MYSQL作为RDBMS。
谢谢
我在包含基因名的表中有一列。基因名称的例子是dnaA,BN_001,BN_0023等...SQL LIKE语句不起作用
我想要所有基因名称不包含下划线。我使用的声明是这样的:
SELECT Gene from cds WHERE Gene NOT LIKE '%_%';
但是,这不会返回正确的基因名称。问题是什么?我使用MYSQL作为RDBMS。
谢谢
问题是_
在任何单个字符的疗法like
声明的占位符。
相反,你可以使用
SELECT Gene from cds
WHERE instr(Gene, '_') = 0
SELECT Gene from cds WHERE Gene NOT LIKE '%\_%';
_
是LIKE
运营商的特殊字符。你必须逃避它,请尝试Gene NOT LIKE '%\_%';
在MySQL中,下划线表示like
模式中的任何单个字符。你可以阅读这个documentation,但这里是有关部分:
有了这样你可以在模式中使用以下两种通配符。
Character Description
% Matches any number of characters, even zero characters
_ Matches exactly one character
对于这一点,只是使用像locate()
功能:
where locate('_', gene) = 0
你需要躲避下划线,MySQL的似乎支持标准SQL的ESCAPE
SELECT Gene from cds WHERE Gene NOT LIKE '%\_%' ESCAPE '\';
你应该写
LIKE '%\_%' ESCAPE '\'
因为_意味着SQL的东西,所以你必须通过\