使用SQL如何查找字符串中特定字符出现的次数?

29

如何使用SQL查找字符串中特定字符的出现次数?

例如:我想查找字母“d”在此字符串中出现的次数。

declare @string varchar(100)
select @string = 'sfdasadhfasjfdlsajflsadsadsdadsa'

哪个数据库?也许是MySQL? - Mark Brady
请给这个更具描述性的标题,你会看到更好的结果。 - Jeff
答案可能会因数据库而异,请告诉大家你正在使用哪个数据库。 - matt b
4个回答

64

给你:

declare @string varchar(100)
select @string = 'sfdasadhfasjfdlsajflsadsadsdadsa'
SELECT LEN(@string) - LEN(REPLACE(@string, 'd', '')) AS D_Count

可爱,我在考虑使用charindex进行迭代,我更喜欢这种方法。 - vfilby
我同意vfilby的观点,并且可以确认这段代码适用于SQL Server 2005和2008。 - xsl
我是一个 MySql 用户,绝对不是专家。在 MySQL 中,等价于 D_Count 的是什么? - J.J.
D_Count只是该列的别名。我不知道你如何在MySql中设置它。 - Mladen Prajdic
1
你还应该除以你要查找的长度。这个脚本之所以有效,是因为“d”只有一个字符长。如果你要查找“as”,你需要将答案除以二。 - Rob Farley
Sybase ASE(至少15.7版本)需要使用str_replace替代replace,并使用null替代''作为替换字符。 - Tiggyboo

14

如果您想让它更加通用,您应该通过所寻找的内容长度进行除法运算。就像这样:

declare @searchstring varchar(10);
set @searchstring = 'Rob';

select original_string, 
(len(orginal_string) - len(replace(original_string, @searchstring, '')) 
   / len(@searchstring)
from someTable;
这是因为每次找到 'Rob' 后,都会删除三个字符。所以当你删除六个字符时,就相当于找到了两次 'Rob'。

这个查询涉及到一个名为 someTable 的表,该表有一个名为 original_string 的列。而且这个原则适用于任何数据库,你只需要找到相应的函数即可。 - Rob Farley

2

对于所有的Sybase ASE 15老用户,您需要将''替换为null,即

SELECT LEN(@string) - LEN(REPLACE(@string, 'd', null)) AS D_Count

作为一位处理旧版Sybase安装的人,非常感谢... - Al A

0

虽然很有趣,但这并没有真正回答问题。也许可以作为另一个答案的评论。 - ttarchala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接