考虑字符串 "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/