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


Answers:


161

没有直接的功能,但是您可以通过替换来实现:

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

select len(@myvar) - len(replace(@myvar,'o',''))

基本上,这告诉您删除了多少个字符,因此,有多少个实例。

额外:

通过除以要搜索的字符串的长度,可以扩展上述内容以计算多字符字符串的出现次数。例如:

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)

2
也许使用DATALENGTH而不是LEN会更好,因为LEN返回修剪后的字符串的大小。
rodrigocl

4
使用DATALENGTH时需要注意,因为它返回用于存储变量的数据大小。对于varchar,这是可以的,因为存储数据的字节数等于字符串的长度。但是nvarchar每个字符使用2个字节,因此DATALENGTH将使报告的长度加倍。还有其他因素也可能影响DATALENGTH。参见msdn
Jon Egerton

请注意,当所追求的字符位于字符串末尾时,多字符字符串的代码解决方案返回+1。例如:一套@myvar =“卤味的Hello World,向全世界问好,罗老”的回报,而不是6 5
兰斯顿

这是让我开心的简单事情。谢谢!
PseudoToad


14

您可以使用replace和进行操作len

计算中的x字符数str

len(str) - len(replace(str, 'x', ''))

7

从SQL SERVER 2016开始使用此功能

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

-- Output : 3 

当此函数与count函数一起使用时,它将为您提供字符串中存在多少个字符



4

您可以通过将所需的字符替换为空字符串,调用LENGTH函数并从原始字符串的长度中减去来完全在线执行此操作。

SELECT 
  CustomerName, 
  LENGTH(CustomerName) -
  LENGTH(REPLACE(CustomerName, ' ', '')) AS NumberOfSpaces
FROM Customers;

2

您可以内联,但必须注意列数据中的空格。更好地使用datalength()

SELECT 
  ColName, 
  DATALENGTH(ColName) -
  DATALENGTH(REPLACE(Col, 'A', '')) AS NumberOfLetterA
FROM ColName;

-或者-用2个字符替换

SELECT 
  ColName, 
  -LEN(ColName)
  +LEN(REPLACE(Col, 'A', '><')) AS NumberOfLetterA
FROM ColName;

1

sql server的功能:

CREATE function NTSGetCinC(@Cadena nvarchar(4000), @UnChar nvarchar(100)) 
Returns int 

 as  

 begin 

 declare @t1 int 

 declare @t2 int 

 declare @t3 int 

 set @t1 = len(@Cadena) 

 set @t2 = len(replace(@Cadena,@UnChar,'')) 

 set @t3 = len(@UnChar) 


 return (@t1 - @t2)  / @t3 

 end 

Visual Basic和其他代码:

Public Function NTSCuentaChars(Texto As String, CharAContar As String) As Long

NTSCuentaChars = (Len(Texto) - Len(Replace(Texto, CharAContar, ""))) / Len(CharAContar)

End Function

1

最好

DECLARE @yourSpecialMark = '/';
select len(@yourString) - len(replace(@yourString,@yourSpecialMark,''))

它会计数多少次出现特殊标记“ /”


0

使用此代码,它运行良好。我创建了一个接受两个参数的sql函数,第一个参数是我们要搜索的长字符串,它可以接受最多1500个字符的字符串长度(当然,您可以扩展它甚至将其更改为text数据类型)。第二个参数是我们要计算其出现次数的子字符串(其长度最多为200个字符,当然您可以根据需要将其更改)。并且输出是整数,代表频率的数量.....享受它。


CREATE FUNCTION [dbo].[GetSubstringCount]
(
  @InputString nvarchar(1500),
  @SubString NVARCHAR(200)
)
RETURNS int
AS
BEGIN 
        declare @K int , @StrLen int , @Count int , @SubStrLen int 
        set @SubStrLen = (select len(@SubString))
        set @Count = 0
        Set @k = 1
        set @StrLen =(select len(@InputString))
    While @K <= @StrLen
        Begin
            if ((select substring(@InputString, @K, @SubStrLen)) = @SubString)
                begin
                    if ((select CHARINDEX(@SubString ,@InputString)) > 0)
                        begin
                        set @Count = @Count +1
                        end
                end
                                Set @K=@k+1
        end
        return @Count
end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.