mysql - 在MYSQL中查找特定字符串的出现次数

标签 mysql

考虑字符串 "55,33,255,66,55"

我正在寻找使用 mysql select 查询计算此字符串中特定字符(在本例中为“55”)出现次数的方法。

目前我正在使用下面的逻辑来计数

 
select CAST((LENGTH("55,33,255,66,55") - LENGTH(REPLACE("55,33,255,66,55", "55", ""))) / LENGTH("55") AS UNSIGNED)
 

但是这个的问题是,它统计了所有出现的 55 并且结果是 = 3, 但所需的输出是 = 2。

有什么方法可以使这项工作正确吗?请提出建议。

注意:“55”是我们提供的输入,并且考虑值“55,33,255,66,55”来自数据库字段。

问候,

巴兰

最佳答案

您想在 ',55,' 上进行匹配,但需要担心第一个和最后一个位置。您可以使用在输入的前后添加逗号的技巧来解决这个问题:

select LENGTH('55,33,255,66,55') + 2 -
    LENGTH(REPLACE(CONCAT(',', '55,33,255,66,55', ','), ',55,', 'xxx'))

返回 2

我使用 CONCAT 来前置和后置逗号(而不是在文本中添加文字),因为我假设您将在列而不是文字上使用它。

另请注意这些改进:

  • 删除 Actor - 它已经是数字
  • 用长度少一的字符串替换(即',55,'长度4到'xxx'长度3),结果不需要被分割——已经是正确的结果了
  • 2是因为前后加了两个逗号所以长度加了(不需要用CONCAT计算预替换长度)

关于mysql - 在MYSQL中查找特定字符串的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9464249/

相关文章:

mysql - 从表中选择数据

php - 将 PHP mysql 数据分类显示

mysql - 获取表中每个条目组合的公共(public)联接

MySQL 表 - 截断还是不截断?

mysql - MS SQL Server 2005 中的 LIMIT 样式功能

javascript - 如何在系统中使用数据 html(投票)而无需用户更改值(检查)安全 100%

MySQL CAST 作为未签名不起作用

具有 2 个计数和连接的 php 查询

sql - 错误代码 1064 MySQL

java - 读取文本文件并将输出插入到mysql表中