如何用SQL查询字符串中第二个best后的对应单词
提取文本中第二个best后首个单词的SQL实现方案
前提说明
现有数据表name_records结构及示例数据如下:
| ID | Name |
|---|---|
| 1 | Ram played best And he best one |
| 2 | Shiv is best in reading and he is best player |
| 3 | X is best cook |
需求规则:提取Name字段字符串中第二次出现的单词best之后的第一个单词,不存在第二个best则返回n/a,期望输出格式如下:
| ID | Second best word |
|---|---|
| 1 | one |
| 2 | player |
| 3 | n/a |
实现代码
MySQL 版本
SELECT ID, CASE -- 计算best出现次数,判断是否≥2 WHEN (LENGTH(Name) - LENGTH(REPLACE(Name, 'best', ''))) / LENGTH('best') >= 2 THEN SUBSTRING_INDEX( TRIM(SUBSTRING_INDEX(Name, 'best', 3)), -- 截取第二个best之后的所有内容并去除首尾空格 ' ', 1 -- 取第一个空格前的内容即为目标单词 ) ELSE 'n/a' END AS `Second best word` FROM name_records;
PostgreSQL 版本
SELECT ID, CASE WHEN array_length(string_to_array(Name, 'best'), 1) >= 3 THEN split_part(trim(split_part(Name, 'best', 3)), ' ', 1) ELSE 'n/a' END AS "Second best word" FROM name_records;
逻辑说明
- 首先判断
Name中best的出现次数,不足2次直接返回n/a - 截取第二个
best之后的所有内容,去除首尾空格后,按空格拆分取第一个片段即为目标单词
内容的提问来源于stack exchange,提问作者a a
相关产品推荐
相关产品推荐

