bluefred
Messages postés2Date d'inscriptionmercredi 18 janvier 2006StatutMembreDernière intervention11 mai 2009
-
2 mai 2009 à 23:04
bluefred
Messages postés2Date d'inscriptionmercredi 18 janvier 2006StatutMembreDernière intervention11 mai 2009
-
11 mai 2009 à 21:23
Salut,
je suis débutant en SQL, je vais compter le nombre de caractère unique sur chaque ligne.
dans une table j'ai une colonne qui est comme:
id colonne
1 AB
2 AABBAC
3 ABCADDFA
.
.
merci bcp
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 4 mai 2009 à 12:48
Bonjour
il y a plusieurs facon de faire ca, mais je pense que la solution la plus simple, en passant par une procedure stockée, est de :
1/ créer une table temporaire avec une seule colonne
2/ faire une boucle : inserer chaque lettre une par une dans la table temporaire
3/ faire un count(distinct * ) sur la table temporaire = resultat voulu
bluefred
Messages postés2Date d'inscriptionmercredi 18 janvier 2006StatutMembreDernière intervention11 mai 2009 11 mai 2009 à 21:23
Bonjour, merci bcp pour ta réponse.
Désolé, mais je vois pas comment ça va aboutir au résultat, ce que je veux par exemple (+ précisément, cette fois) est d'éliminer quelque bloque de caractère, les 5 chiffres après les deux 1er caractères alphanumérique, et après, extraire les éléments uniques par ligne.
RegStr
----------------------------------------------------
AA00123-AA00124-AF00525
----------------------------------------------------
AA00823-A900624-TF00525-TF00124-AA00123
----------------------------------------------------
AA00123-AA00724-AF00525-AF12345-AA00978
----------------------------------------------------
AB00123-AB00124-AF00525-AB00987-AF56432
----------------------------------------------------
...
J'ai fais une recherche sur le net et j'ai trouver que Oracle géré très bien cette question a l'aide de Regular Expression (REGEXP_REPLACE) mais je connais pas comment le faire avec MS SQL.
Avec MS SQL (Version 7.0), j'ai créé un curseur ça marche mais ça se bloque quelque part, ma table contient a peu prés 1 million d'observation et peut évoluer d'avantage.
C'est quoi le plus rapide et sure, les curseurs ou la procédure stock
ée
Declare @Num int, @String varchar(250), @RegStr varchar(250), @j int
Declare Get_RegStr cursor for
select RegStr from #Test
open Get_RegStr
fetch next from Get_RegStr into @String
set @RegStr = @String
WHILE @@FETCH_STATUS = 0
begin
set @Num = (len(replace(@RegStr,'-',''))/7)
set @j = 0
WHILE @j < @Num
begin
set @RegStr = STUFF(@RegStr, 3+2*@j, 6, '')
set @j=@j+1
end
update #Test
set AllRegStr = @RegStr
where #Test.RegStr = @string
FETCH NEXT FROM Get_RegStr into @String
set @RegStr = @String
end
close Get_RegStr
-----------------------------------------------------------
--Get UniqueStr
-----------------------------------------------------------
Declare @Str varchar(250), @i int, @Count int, @result varchar(250), @RegStr varchar(250)
Declare Get_Unique cursor for
select AllRegStr from #Test
open Get_Unique
fetch next from Get_Unique into @Str
set @RegStr = @Str
WHILE @@FETCH_STATUS = 0
begin
set @i = 1
set @count = (len(@RegStr))
while (@i < @Count)
begin
if (@result IS NULL)
begin
set @result = ''
end
set @result = @result + SUBSTRING(@RegStr,1,2)
set @RegStr = REPLACE(@RegStr,SUBSTRING(@RegStr,1,2),'')
set @i = @i + 2
end
update #Test
set UniqueStr = @result
where #Test.AllRegStr = @Str
FETCH NEXT FROM Get_Unique into @Str
set @RegStr = @Str
set @result = ''
end
close Get_Unique
deallocate Get_Unique