96 votes

Nombre de fois qu'un caractère particulier apparaît dans une chaîne de caractères

Existe-t-il une fonction MS SQL Server qui compte le nombre de fois qu'un caractère particulier apparaît dans une chaîne de caractères ?

0 votes

1 votes

Essayez la question similaire suivante lien

0 votes

Duplicata de SO Comment compter le nombre d'occurrences d'une certaine sous-chaîne dans un varchar SQL ? qui est plus ancien et a plus de réponses.

198voto

Jon Egerton Points 16192

Il n'y a pas de fonction directe pour cela, mais vous pouvez le faire avec un remplacement :

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

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

En gros, cela vous indique combien de personnages ont été supprimés, et donc combien d'instances il y a eu.

Extra :

Ce qui précède peut être étendu pour compter les occurrences d'une chaîne de caractères multiples en divisant par la longueur de la chaîne recherchée. Par exemple :

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)

2 votes

Il serait peut-être préférable d'utiliser DATALENGTH au lieu de LEN, car LEN renvoie la taille de la chaîne découpée.

4 votes

L'utilisation de DATALENGTH nécessite une attention particulière, car elle renvoie la taille des données utilisées pour stocker la variable. Pour une variable varchar, cela ne pose pas de problème car le nombre d'octets pour stocker les données est égal à la longueur de la chaîne. Toutefois, nvarchar utilise 2 octets pour chaque caractère, de sorte que DATALENGTH doublerait la longueur indiquée. D'autres facteurs peuvent également affecter DATALENGTH. Voir msdn

0 votes

Sachez que la solution de code pour les chaînes de caractères multiples renvoie +1 lorsque les caractères recherchés sont à la fin de la chaîne. Par exemple : set @myvar = 'lo Hello World, Hello World, lo lo' renvoie 6 au lieu de 5.

22voto

Alex K. Points 67805

Regardez la longueur de la chaîne après avoir remplacé la séquence

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

0 votes

Idée très intelligente

18voto

Guffa Points 308133

Vous pouvez le faire en utilisant replace y len .

Comptez le nombre de x caractères dans str :

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

11voto

Toprak Points 389

Utilisez cette fonction à partir de SQL SERVER 2016

Select Count(value) From STRING_SPLIT('AAA AAA AAA',' ');

-- Output : 3 

Lorsque cette fonction est utilisée avec la fonction de comptage, elle vous donne le nombre de caractères qui existent dans la chaîne de caractères. caractères existent dans la chaîne de caractères

5voto

Royi Namir Points 34397

Essayez cela :

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X