mysql 获取一段文字中包含指定词的一句话?

mysql 字段text下,包含 关键词 “突然” 的 一句话?以!?。开头及结尾

idtext
1也许是老天爷的厚爱吧!寒假的开头下了好几场大雪,雪娃娃像一个个顽皮的孩子,从空中跳下来。世界顿时变得银装素裹。我们兴奋不已,尤其是我,像一只突然放飞自由的小小鸟,在雪空中尽情的飞舞,我又拿通红的小手用力地推动着大雪球。可我一点也不觉得冷,搞定了,我们欢呼!小雪娃娃让我们变得仿佛活了。大风呼呼的吹着,大雪还在继续得下着,可我们却没有一点回家的意愿。我们兴致勃勃,在雪中疯狂的跑呀跳呀!到处都留下了我们的欢声笑语。打雪仗更是不不可少的,我们准备了许多雪球向对方砸去,“中了,又中了……”最后我们以绝对的优势赢得了这场激烈的比赛。做孩子真是快乐,我要永远都是长不大的孩子该有多好呀!

我们兴奋不已,尤其是我,像一只突然放飞自由的小小鸟,在雪空中尽情的飞舞,我又拿通红的小手用力地推动着大雪球。

请求指导~

阅读 1.8k
3 个回答

如果想搜文章有突然两个字的
select * from 表名 where text like '%突然%';

如果想搜文章有突然两个字的并且以指定字符开头结尾的
select * from 表名 where text like '[!?。]%突然%[!?。]';

有些麻烦,但也不是不能做到。在 MySQL 中,使用 LOCATE() 可以获取到子串第一次出现的位置。

理论上在这个位置之前搜索 出现的位置,再在这个位置之后搜索 出现的位置,就能知道开始和结束的位置。

但是,在数据库中实现此类需求,性能极差,建议对对应列添加全文索引,然后仅查到相关关键字,再在程序中处理子句。


以下语句适用于 MySQL 8.x。

with cc
    as (select '也许是老天爷的厚爱吧!寒假的开头下了好几场大雪,雪娃娃像一个个顽皮的孩子,从空中跳下来。世界顿时变得银装素裹。我们兴奋不已,尤其是我,像一只突然放飞自由的小小鸟,在雪空中尽情的飞舞,我又拿通红的小手用力地推动着大雪球。可我一点也不觉得冷,搞定了,我们欢呼!小雪娃娃让我们变得仿佛活了。大风呼呼的吹着,大雪还在继续得下着,可我们却没有一点回家的意愿。我们兴致勃勃,在雪中疯狂的跑呀跳呀!到处都留下了我们的欢声笑语。打雪仗更是不不可少的,我们准备了许多雪球向对方砸去,“中了,又中了……”最后我们以绝对的优势赢得了这场激烈的比赛。做孩子真是快乐,我要永远都是长不大的孩子该有多好呀!' as t1)
   , c1 as (select t1, locate('突然', t1) as st0
            from cc)
   , c2 as (select t1,
                   st0,
                   # 结束的位置
                   locate('。', t1, st0)                    as endpos,
                   # 开始的句号,截取全文开始位置到发现文案(突然)之前的位置,并截取出关键字之前的句子。
                   substring_index(left(t1, st0), '。', -1) as prestr
            from c1)
# 拼接起来
select concat(prestr, mid(t1, st0 + 1, endpos - st0))
from c2;

以下 SQL 适用于 MySQL 5.x。

create table tsb
(
    t1 varchar(600)
);

insert into tsb
values ('也许是老天爷的厚爱吧!寒假的开头下了好几场大雪,雪娃娃像一个个顽皮的孩子,从空中跳下来。世界顿时变得银装素裹。我们兴奋不已,尤其是我,像一只突然放飞自由的小小鸟,在雪空中尽情的飞舞,我又拿通红的小手用力地推动着大雪球。可我一点也不觉得冷,搞定了,我们欢呼!小雪娃娃让我们变得仿佛活了。大风呼呼的吹着,大雪还在继续得下着,可我们却没有一点回家的意愿。我们兴致勃勃,在雪中疯狂的跑呀跳呀!到处都留下了我们的欢声笑语。打雪仗更是不不可少的,我们准备了许多雪球向对方砸去,“中了,又中了……”最后我们以绝对的优势赢得了这场激烈的比赛。做孩子真是快乐,我要永远都是长不大的孩子该有多好呀!');


select concat(prestr, mid(t1, st0 + 1, endpos - st0))
from (select t1, st0, locate('。', t1, st0) as endpos, substring_index(left(t1, st0), '。', -1) as prestr
      from (select t1, locate('突然', t1) as st0
            from tsb) as tmp1) as tm2;

直接用SQL处理到也不是不可以,但是没有javascript方便

const str = '也许是老天爷的厚爱吧!寒假的开头下了好几场大雪,雪娃娃像一个个顽皮的孩子,从空中跳下来。世界顿时变得银装素裹。我们兴奋不已,尤其是我,像一只突然放飞自由的小小鸟,在雪空中尽情的飞舞,我又拿通红的小手用力地推动着大雪球。可我一点也不觉得冷,搞定了,我们欢呼!小雪娃娃让我们变得仿佛活了。大风呼呼的吹着,大雪还在继续得下着,可我们却没有一点回家的意愿。我们兴致勃勃,在雪中疯狂的跑呀跳呀!到处都留下了我们的欢声笑语。打雪仗更是不不可少的,我们准备了许多雪球向对方砸去,“中了,又中了……”最后我们以绝对的优势赢得了这场激烈的比赛。做孩子真是快乐,我要永远都是长不大的孩子该有多好呀!';
const regex = /[。!?]/g; // 定义正则表达式,包含多个分割符号,我简单举了三个,分割句子的应该还有几个
const result = str.split(regex); // 使用split方法按照正则表达式进行分割
console.log(result); 

const rs=result.filter((item)=>{
    return item.includes('突然') //查找包含突然的句子
})

console.log(rs)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题