特定字符出现在字符串中的次数

Old*_*Man 66 sql-server

是否有MS SQL Server函数计算特定字符在字符串中出现的次数?

Jon*_*ton 140

这没有直接的功能,但您可以使用替换:

declare @myvar varchar(20)
set @myvar = 'Hello World'

select len(@myvar) - len(replace(@myvar,'o',''))
Run Code Online (Sandbox Code Playgroud)

基本上这会告诉你删除了多少个字符,因此有多少个字符被删除.

额外:

以上内容可以扩展为通过除以被搜索的字符串的长度来计算多字符串的出现次数.例如:

declare @myvar varchar(max), @tocount varchar(20)
set @myvar = 'Hello World, Hello World'
set @tocount = 'lo'

select (len(@myvar) - len(replace(@myvar,@tocount,''))) / LEN(@tocount)
Run Code Online (Sandbox Code Playgroud)

  • 也许使用 DATALENGTH 而不是 LEN 会更好,因为 LEN 返回修剪后的字符串的大小。 (2认同)
  • 使用DATALENGTH需要小心,因为它返回用于存储变量的数据大小.对于varchar,这是正确的,因为存储数据的字节数等于字符串的长度.但是,nvarchar为每个字符使用2个字节,因此DATALENGTH会使报告的长度加倍.还有其他因素也可能影响DATALENGTH.见[msdn](https://docs.microsoft.com/en-us/sql/t-sql/functions/datalength-transact-sql?view=sql-server-2017) (2认同)

Ale*_* K. 16

更换序列后查看字符串的长度

declare @s varchar(10) = 'aabaacaa'
select len(@s) - len(replace(@s, 'a', ''))
>>6
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 10

你可以用replace和做len.

计算x字符数str:

len(str) - len(replace(str, 'x', ''))
Run Code Online (Sandbox Code Playgroud)


Top*_*rak 8

从 SQL SERVER 2016 开始使用此函数

Select Count(value) From STRING_SPLIT('AAA AAA AAA',' ');

-- Output : 3 
Run Code Online (Sandbox Code Playgroud)

当此函数与计数函数一起使用时,它会为您提供字符串中存在的字符数


Roy*_*mir 5

试试看:

declare @t nvarchar(max)
set @t='aaaa'

select len(@t)-len(replace(@t,'a',''))
Run Code Online (Sandbox Code Playgroud)