我需要获取包含cooking spray
的所有记录,但前提是它不在引号中:
cooking spray > 1
'cooking spray' > 0
"cooking spray" > 0
我在制定REGEXP时遇到了麻烦。这似乎很接近,但我收到一条消息,说“重复 - 操作员操作数无效"。
select count(*)
from recipes r
where r.ingredient REGEXP '(?<![\'"])cooking spray(?![\'"])'
答案 0 :(得分:2)
您可以改为使用此REGEXP
值:
SELECT COUNT(*)
FROM recipes r
WHERE r.ingredient REGEXP '(^|[^\'"])cooking spray([^\'"]|$)'
修改强>
在Patrick Q comment之后,我编辑了正则表达式以匹配:
cooking spray
foo cooking spray
cooking spray bar
foo cooking spray bar
答案 1 :(得分:0)
如何使用like
?
select count(*)
from recipes r
where r.ingredient like '%cooking spray%' and
r.ingredient not like '%''cooking spray''%' and
r.ingredient not like '%"cooking spray""%';
我意识到如果配料包含引用和未引用的形式,这些解决方案都不会起作用。为此,请使用replace
:
select count(*)
from recipes r
where replade(replace(r.ingredient, '''cooking spray''', ''), '"cooking spray"', '') like '%cooking spray%'
答案 2 :(得分:0)
尝试此操作(不使用外观):'.*[^"\']cooking spray[^"\'].*'
(PS: zessx 更快,他的回答更好地处理边缘情况)