自学内容网 自学内容网

【SQL】筛选某一列字段中,截取含有关键词“XX”字段位置的前4个字段,去重后查看字段

最近在查询数据库的一些数据,想要统计表格里有多少公司,发现表格里没有公司这一列,只能从但是有一些标题字段,只能从中筛选。

假设关键词是[公司],我们要在数据库的表格中,找到名为title的列,列里面所有含有【公司】的名称,且因为公司名称不定,则直接公司前6位的字符,直接整理出一个名单出来

要清洗的数据格式类似这样:
在这里插入图片描述
想要实现的效果:
在这里插入图片描述

要实现这个需求,我们需要编写一个SQL查询,该查询要包含下面的条件:

  1. 需要从文本中筛选包含“公司”关键词的字段

  2. 需要找到“公司”关键词在字段中的位置,然后截取“公司”关键词位置前的X个字符(X 代表多少个,这个需要自己按照现实情况决定)

  3. 需要对重复数据做去重

以下是一个SQL查询的示例,假设你的表名为your_table,列名为title,我们将使用MySQL的函数作为示例:

SELECT DISTINCT SUBSTRING(title, 1, CHAR_LENGTH(title) - CHAR_LENGTH(REPLACE(title, '公司', '')) + 6) AS company_name
FROM your_table
WHERE title LIKE '%公司%';

如果想要计算数值,在distinct前面加一个count就可以了

这个查询会做以下事情:

  1. REPLACE:替换掉字段中的所有关键词,替换为空字符串。

  2. CHAR_LENGTH(title) - CHAR_LENGTH(REPLACE(title, 'XX', ''))
    计算整体的关键词的总长度。

  3. CHAR_LENGTH(title) - CHAR_LENGTH(REPLACE(title, 'XX', '')) + 4
    计算“公司”关键词前4个字符的位置。

  4. SUBSTRING(title, 1, CHAR_LENGTH(title) - CHAR_LENGTH(REPLACE(title, '公司', '')) + 4)
    根据上一步计算的位置,截取“公司”关键词前的4个字符。

  5. DISTINCT:去除结果中的重复项。

  6. WHERE title LIKE '%公司%':筛选出title列中包含“公司”关键词的字段。

如果没有用CHAR_LENGTH 来计算长度的话,使用LEFT 也可以查询,但是会获取到标题的前N个字符:

SELECT COUNT(DISTINCT LEFT(your_column, 4)) AS unique_count
FROM your_table
WHERE your_column LIKE '%医院%';

原文地址:https://blog.csdn.net/Meggie35/article/details/144724343

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!