在数据库中搜索具有多个{tokens}的字符串

时间:2012-04-18 18:56:20

标签: mysql sql

考虑下表和消息。其中一些标签包含{bar|***}形式的一个或多个标签,其中***为任意字母(数字,数字,标点符号)。

id  message
---------------------------------------------------
1   foo {bar|112} baz {bar|foo} {bar|215.54}
2   lorem ipsum {bar|foo} dolor {bar|samet} digitas
3   last {bar|t} label example
4   string with no label
5   another {zoo} string with {foo|ads} label

如果我想查找至少包含{bar | * }形式标签的所有邮件,我会查询:

SELECT * FROM messages WHERE message LIKE '%{bar|%';

但是现在,我需要一个查询,我只能选择那些最多两个这样的标签的消息:

id  message
---------------------------------------------------
2   lorem ipsum {bar|foo} dolor {bar|samet} digitas
3   last {bar|t} label example

换句话说:有没有办法(在MySQL中)计算邮件中的标签数量并仅返回其中包含一个或两个标签的邮件?

1 个答案:

答案 0 :(得分:1)

SELECT * FROM messages WHERE (LENGTH(message) - LENGTH(REPLACE(message,'{bar|','')))/5 BETWEEN 1 AND 2;

这应该有用。