是否有MS SQL Server函数计算特定字符在字符串中出现的次数?
答案 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)
您可以使用replace
和len
。
计算x
中str
个字符的数量:
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);
它将计算特殊标记'/'
的次数