163 votes

Comment comptez-vous le nombre d'occurrences d'une certaine sous-chaîne dans un varchar SQL?

J'ai une colonne qui a des valeurs formatées comme a, b, c, d. Existe-t-il un moyen de compter le nombre de virgules dans cette valeur dans T-SQL?

263voto

cmsjr Points 16766

La première façon de penser est de le faire indirectement en remplaçant la virgule par une chaîne vide et en comparant les longueurs.

 Declare @string varchar(1000)
Set @string = 'a,b,c,d'
select len(@string) - len(replace(@string, ',', ''))
 

73voto

Andrew Barrett Points 9848

Extension rapide de la réponse de cmsjr qui fonctionne pour les chaînes comportant plus de caractères.

 CREATE FUNCTION dbo.CountOccurancesOfString
(
    @searchString nvarchar(max),
    @searchTerm nvarchar(max)
)
RETURNS INT
AS
BEGIN
    return (LEN(@searchString)-LEN(REPLACE(@searchString,@searchTerm,'')))/LEN(@searchTerm)
END
 

Usage:

 SELECT * FROM MyTable
where dbo.CountOccurancesOfString(MyColumn, 'MyString') = 1
 

30voto

Guffa Points 308133

Vous pouvez comparer la longueur de la chaîne avec celle où les virgules sont supprimées:

 len(value) - len(replace(value,',',''))
 

2voto

NIKHIL THAKUR Points 1
Declare @string varchar(1000)

DECLARE @SearchString varchar(100)

Set @string = 'as as df df as as as'

SET @SearchString = 'as'

select ((len(@string) - len(replace(@string, @SearchString, ''))) -(len(@string) - 
        len(replace(@string, @SearchString, ''))) % 2)  / len(@SearchString)

0voto

Shiva Points 765
DECLARE @records varchar(400)
SELECT @records = 'a,b,c,d'
select  LEN(@records) as 'Before removing Commas' , LEN(@records) - LEN(REPLACE(@records, ',', '')) 'After Removing Commans'

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