mysql字符串包含字符串

ccrfmcuu  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(411)

我正在使用mysql工作台,目前正在寻找一个函数或其他东西来帮助我检查一个字符串是否在另一个字符串中。例如: text1 = 'hello , name , world'; 如果我有一根绳子 varchar 是这样的 'My name is' 它应该说它包含,因为它有'名字'。基本上我要做的是我有一个comments表,在插入注解之前创建一个触发器,检查 comment_text 包含任何脏话。这些骂人的话是这样保存的
从保留的\u字中选择组\u concat(word)为texto;
所以所有的单词都很接近:swear1,swear2,swear3,等等
我希望它更新一个特定的表,如果评论真的包含一个脏话。我试着用 LIKE, SUBSTR(),CONTAINS(),REGEXP 没有任何成功。
有人能帮忙吗?

lx0bsm1f

lx0bsm1f1#

我建议:

where comment regexp replace(swearwords, ',', '|')

您可能希望也可能不希望在正则表达式模式中包含单词分隔符。

raogr8fs

raogr8fs2#

LIKE 是你想要的。你得把它包起来 % 匹配字符串中的任何位置。

WHERE string LIKE '%name%'

如果 string 列包含字符串 name .
如果在表的列中有脏话,则可以将它们连接起来:

SELECT DISTINCT comment
FROM comments AS c
JOIN swear_words AS s ON c.comment LIKE CONCAT('%', s.word, '%')

不要把脏话放在逗号分隔的列表中,这使得在mysql中单独使用它们非常困难。

kcugc4gi

kcugc4gi3#

构建正则表达式模式 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

相关问题