2012-03-20 11 views
42

Esiste la funzione MS SQL Server che conta il numero di volte in cui un determinato carattere appare in una stringa?Numero di volte in cui un determinato carattere appare in una stringa

+0

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

+1

provare il seguente simile domanda SO [link] (http: //stackoverflow.com/questions/1144172/how-to-count-the-number-of-times-a-character-appears-in-a-sql-column) –

+0

Duplicato di SO [Come contate il numero di occorrenze di una determinata sottostringa in un SQL varchar?] (http://stackoverflow.com/questions/738282/how-do-you-count-the-number-of-occurrences-of-a-certain-substring-in- a-sql-varch) che è più vecchio e ha più risposte. – Peter

risposta

99

Non c'è alcuna funzione diretta per questo, ma si può farlo con una sostituzione:

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

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

Fondamentalmente questo indica quanti caratteri sono stati rimossi, e quindi come molti casi ce n'erano.

Extra:

Quanto sopra può essere esteso per contare le occorrenze di una stringa multi-char dividendo per la lunghezza della stringa da ricercare. Per esempio:

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

Forse usare DATALENGTH invece LEN sarebbe meglio, perché LEN restituisce la dimensione della stringa tagliata. – rodrigocl

4

provare che:

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

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

è possibile farlo utilizzando replace e len.

numero Conte di x personaggi in str:

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

Guardate la lunghezza della stringa dopo la sostituzione della sequenza

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

funzione per 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 

Codice per visual basic e altri:

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

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

End Function 
Problemi correlati