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

时间:2012-03-20 14:57:24

标签: sql-server

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

9 个答案:

答案 0 :(得分:135)

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

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)

答案 1 :(得分:16)

在替换序列

后查看字符串的长度
declare @s varchar(10) = 'aabaacaa'
select len(@s) - len(replace(@s, 'a', ''))
>>6

答案 2 :(得分:9)

您可以使用replacelen

来实现

计算xstr个字符的数量:

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

答案 3 :(得分:4)

试试:

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

select len(@t)-len(replace(@t,'a',''))

答案 4 :(得分: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;

答案 5 :(得分: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

答案 6 :(得分:1)

你可以通过用空字符串替换所需的字符,调用LENGTH函数并从原始字符串的长度中减去来完全内联。

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

答案 7 :(得分: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

答案 8 :(得分:0)

最佳

Handler handler = new org.xml.sax.helpers.DefaultHandler {
    @Override
    public void startElement(String uri, 
        String localName, String qName, Attributes attributes) throws SAXException {
    }

    @Override
    public void endElement(String uri, 
        String localName, String qName) throws SAXException {
    }

    @Override
    public void characters(char ch[], int start, int length) throws SAXException {
    }
};
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
InputStream in = new ByteArrayInputStream(bytes);
parser.parse(in, handler);

它将计算特殊标记'/'

的次数