我正在使用MySQL Workbench,目前正在寻找一个函数或某种可帮助我检查字符串是否在另一个字符串中的东西。 例如:
text1 = 'hello , name , world';
如果我有一个字符串或varchar
就是这样
'My name is'
应该说它包含,因为它上面带有“名称”。
基本上,我想做的是有一个Comments表,并在插入Comments之前创建一个触发器,以检查comment_text
是否包含任何脏话。这些骂人的话就是这样保存的
从reserved_words中将group_concat(word)选择为文本;
因此,所有词语彼此都非常接近:swear1,swear2,swear3等
如果注释中确实包含一个脏话,我希望它更新某个表。
我尝试使用LIKE, SUBSTR(),CONTAINS(),REGEXP
并没有成功。
有人可以帮忙吗?
答案 0 :(得分:1)
我建议:
where comment regexp replace(swearwords, ',', '|')
您可能希望也可能不希望在正则表达式模式中包含单词定界符。
答案 1 :(得分:0)
LIKE
是您想要的。您需要使用%
将其包装起来,以匹配字符串中的任何地方。
WHERE string LIKE '%name%'
如果string
列的值包含字符串name
,则为true。
如果表的一列中有脏话,则可以将它们连接起来:
SELECT DISTINCT comment
FROM comments AS c
JOIN swear_words AS s ON c.comment LIKE CONCAT('%', s.word, '%')
不要将脏话放入逗号分隔的列表中,这使得在MySQL中单独使用它们非常困难。
答案 2 :(得分:0)
从reserved_words
表构建您的正则表达式模式:
select CONCAT('(',group_concat(word SEPARATOR '|'),')') from reserved_words
然后对REGEXP
字段运行comment
检查。
演示运行
create table reserved_words(word varchar(10));
insert into reserved_words values('hello'),('name'),('world');
select 'My name is' REGEXP (select CONCAT('(',group_concat(word SEPARATOR '|'),')') from reserved_words) swear
UNION ALL
select 'My title is' REGEXP (select CONCAT('(',group_concat(word SEPARATOR '|'),')') from reserved_words) swear
UNION ALL
select 'hello world' REGEXP (select CONCAT('(',group_concat(word SEPARATOR '|'),')') from reserved_words) swear;
结果
swear
1
0
1