0

我正在查询歌曲数据库,并且想要分离出包含歌曲“Tube”的行(它可能出现在它之前和之后的任意数量的字符,例如“Track 01. Tube -> Another song”),但不是匹配歌曲“First Tube”或“Last Tube”,它们也可能包含无关字符。

我一直在用这个查询做这个:

SELECT * FROM `songs` WHERE `song` LIKE ('%Tube%') and song not like ('%first%') and song not like ('%last%');

但更喜欢使用正则表达式,以便我可以在其他地方使用相同的匹配(比如在 PHP 代码中)。

我试过这样的事情:

SELECT * FROM songs WHERE song REGEXP '.*(first|last){0}.*(tube).*';

但它显然不起作用,它也匹配“First Tube”歌曲。

4

1 回答 1

0

如果您想在这里使用正则表达式,我认为您可能正在寻找更符合这些方面的正则表达式:

SELECT * FROM songs WHERE song REGEXP ".*Tube.*" and NOT REGEXP ".*first.*|.*last.*"

这与您上面的陈述相距不远LIKE,但它会给您一个开始。

于 2013-01-15T03:52:05.500 回答