如何使用MySQL从文本片段中查询匹配的姓名
解决方案
要从Names表中提取出姓名中文译名出现在给定文本片段中的记录,可以使用以下两种MySQL查询方式:
方法一:直接匹配对应关系(适合少量姓名场景)
SELECT NameId, Name FROM Names WHERE (Name = 'Mick Jagger' AND INSTR('滚石乐队是一支1962年成立的传奇英国摇滚乐队。以其持久的影响力和标志性热门歌曲著称,成员包括米克·贾格尔(主唱)、基思·理查兹(吉他手)、查理·沃茨(鼓手)、罗尼·伍德(吉他手),以及布莱恩·琼斯、比尔·怀曼等前成员。他们融合摇滚、蓝调和节奏蓝调的风格,全球唱片销量超过2亿张。音乐跨度数十年,拥有《Paint It Black》《(I Can't Get No) Satisfaction》《Angie》等永恒经典。凭借震撼的现场表演,滚石乐队仍是史上最伟大的摇滚乐队之一。', '米克·贾格尔') > 0) OR (Name = 'Keith Richards' AND INSTR('滚石乐队是一支1962年成立的传奇英国摇滚乐队。以其持久的影响力和标志性热门歌曲著称,成员包括米克·贾格尔(主唱)、基思·理查兹(吉他手)、查理·沃茨(鼓手)、罗尼·伍德(吉他手),以及布莱恩·琼斯、比尔·怀曼等前成员。他们融合摇滚、蓝调和节奏蓝调的风格,全球唱片销量超过2亿张。音乐跨度数十年,拥有《Paint It Black》《(I Can't Get No) Satisfaction》《Angie》等永恒经典。凭借震撼的现场表演,滚石乐队仍是史上最伟大的摇滚乐队之一。', '基思·理查兹') > 0) OR (Name = 'Charlie Watts' AND INSTR('滚石乐队是一支1962年成立的传奇英国摇滚乐队。以其持久的影响力和标志性热门歌曲著称,成员包括米克·贾格尔(主唱)、基思·理查兹(吉他手)、查理·沃茨(鼓手)、罗尼·伍德(吉他手),以及布莱恩·琼斯、比尔·怀曼等前成员。他们融合摇滚、蓝调和节奏蓝调的风格,全球唱片销量超过2亿张。音乐跨度数十年,拥有《Paint It Black》《(I Can't Get No) Satisfaction》《Angie》等永恒经典。凭借震撼的现场表演,滚石乐队仍是史上最伟大的摇滚乐队之一。', '查理·沃茨') > 0) OR (Name = 'Ronnie Wood' AND INSTR('滚石乐队是一支1962年成立的传奇英国摇滚乐队。以其持久的影响力和标志性热门歌曲著称,成员包括米克·贾格尔(主唱)、基思·理查兹(吉他手)、查理·沃茨(鼓手)、罗尼·伍德(吉他手),以及布莱恩·琼斯、比尔·怀曼等前成员。他们融合摇滚、蓝调和节奏蓝调的风格,全球唱片销量超过2亿张。音乐跨度数十年,拥有《Paint It Black》《(I Can't Get No) Satisfaction》《Angie》等永恒经典。凭借震撼的现场表演,滚石乐队仍是史上最伟大的摇滚乐队之一。', '罗尼·伍德') > 0);
方法二:使用临时映射表(扩展性更强)
如果需要匹配的姓名较多,可通过临时表建立英文姓名与中文译名的对应关系,再关联查询:
SELECT n.NameId, n.Name FROM Names n INNER JOIN ( SELECT 'Mick Jagger' AS english_name, '米克·贾格尔' AS chinese_name UNION ALL SELECT 'Keith Richards', '基思·理查兹' UNION ALL SELECT 'Charlie Watts', '查理·沃茨' UNION ALL SELECT 'Ronnie Wood', '罗尼·伍德' UNION ALL SELECT 'Tom Thumb', '汤姆·桑姆' UNION ALL SELECT 'Peter Pan', '彼得·潘' UNION ALL SELECT 'David Bowie', '大卫·鲍伊' UNION ALL SELECT 'Brian May', '布莱恩·梅' ) name_map ON n.Name = name_map.english_name WHERE INSTR('滚石乐队是一支1962年成立的传奇英国摇滚乐队。以其持久的影响力和标志性热门歌曲著称,成员包括米克·贾格尔(主唱)、基思·理查兹(吉他手)、查理·沃茨(鼓手)、罗尼·伍德(吉他手),以及布莱恩·琼斯、比尔·怀曼等前成员。他们融合摇滚、蓝调和节奏蓝调的风格,全球唱片销量超过2亿张。音乐跨度数十年,拥有《Paint It Black》《(I Can't Get No) Satisfaction》《Angie》等永恒经典。凭借震撼的现场表演,滚石乐队仍是史上最伟大的摇滚乐队之一。', name_map.chinese_name) > 0;
说明
INSTR(target_text, substring)函数用于检测子串是否存在于目标文本中,返回值大于0即表示匹配成功。- 两种方法都会返回
NameId为4、5、6、7的记录,对应目标文本中提到的滚石乐队成员英文姓名。
内容的提问来源于stack exchange,提问作者StripyTiger
相关产品推荐
相关产品推荐

