2012-03-20 28 views
42

Belirli bir karakterin bir dizede kaç kez görüntülendiğini sayan MS SQL Server işlevi var mı?Belirli bir karakterin bir dizede görüntülenme sayısı

+0

Bu http://social.msdn.microsoft.com/Forums/en/transactsql/thread/6bd2da08-af9e-4216-bec3-1e859415d800 –

+1

aşağıdaki benzer SO soru [link] deneyin (http yardımcı olabilir: //stackoverflow.com/questions/1144172/how-to-count-the-number-of-times-a-character-appears-in-a-sql-column) –

+0

SO kopyası [Nasıl sayılırsınız Belirli bir alt dizinin bir SQL varcharında oluşumu?] (http://stackoverflow.com/questions/738282/how-do-you-count-the-number-of-occurrences-of-a-certain-substring-in- daha büyük ve daha fazla cevapları olan bir sql-varch). – Peter

cevap

99

, ancak bunu yapabilirsiniz değiştirin:

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

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

Temelde bu kadar çok karakter bu nedenle nasıl kaldırılır ve nasıl anlatır Birçok örneği vardı. İlave

:

Yukarıda için araştırılır dizinin uzunluğu ile bölünmesi ile, bir çok-Char dize tekrarlarını saymak için uzatılabilir. Örneğin:

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

Belki de DATALENGTH kullanarak LEN daha iyi olurdu, çünkü LEN kesilen dizgenin boyutunu döndürür. – rodrigocl

4

denemek:

Bunun doğrudan bir işlevi yoktur
declare @t nvarchar(max) 
set @t='aaaa' 

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

Sen replace ve len kullanarak da yapabilirsiniz. str içinde x karakter

Sayısı numarası: dizisini değiştirdikten sonra dize uzun uzadıya

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

Bak

declare @s varchar(10) = 'aabaacaa' 
select len(@s) - len(replace(@s, 'a', '')) 
>>6 
1

sql sunucusu için fonksiyonu:

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 

Kodu Görsel temel ve diğerleri için:

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

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

End Function 
İlgili konular