2008-11-13 12 views
21

Jak znaleźć liczbę wystąpień określonego znaku w ciągu znaków przy użyciu języka sql?Jak znaleźć liczbę wystąpień określonego znaku w ciągu znaków przy użyciu języka sql?

Przykład: Chcę znaleźć ile razy litera "d" pojawia się w tym ciągu.

declare @string varchar(100) 
select @string = 'sfdasadhfasjfdlsajflsadsadsdadsa' 
+0

Którą bazę? Może MySQL? –

+0

Podaj ten bardziej opisowy tytuł, a zobaczysz lepsze wyniki. – Jeff

+0

Odpowiedź prawdopodobnie będzie zależna od bazy danych, więc powiedz wszystkim, z której bazy danych korzystasz. –

Odpowiedz

49

Proszę bardzo:

declare @string varchar(100) 
select @string = 'sfdasadhfasjfdlsajflsadsadsdadsa' 
SELECT LEN(@string) - LEN(REPLACE(@string, 'd', '')) AS D_Count 
+0

Sprytnie, myślałem o iteracji z charindexem, podoba mi się to znacznie lepiej. – vfilby

+0

Zgadzam się z vfilby i mogę potwierdzić, że ten kod działa w SQL Server 2005 i 2008. – xsl

+0

Zgadzam się również ... dużo za twoją pomoc .. to działa ... thx raz jeszcze .. –

12

Jeśli chcesz zrobić to trochę bardziej ogólnie, należy podzielić przez długość rzeczą, której szukasz. W ten sposób:

declare @searchstring varchar(10); 
set @searchstring = 'Rob'; 

select original_string, 
(len(orginal_string) - len(replace(original_string, @searchstring, '')) 
/len(@searchstring) 
from someTable; 

Dzieje się tak, ponieważ za każdym razem, gdy znajdziesz "Rob", usuniesz trzy znaki. Więc kiedy usuniesz sześć znaków, dwukrotnie znalazłeś "Rob".

+0

Liczby, o które pytasz tabelę o nazwie 'someTable', która ma kolumnę o nazwie' original_string'. Zasada zadziała w dowolnej bazie danych, wystarczy znaleźć odpowiednie funkcje. –