2012-10-10 3 views
2

Mes données de table ressemble:Obtenez partie URL uniquement dans SQL Server

SessionRefere 

http://www.google.com/url?sa=t&rct=j&q=aaa bbb&source=web&cd=1&cad=rja&sqi=2&ved=0CB4QFjAA&url=http://www.abc.com/&ei=QFR0UM-JKIrQrQfsuoG4CQ&usg=AFQjCNExYcKkcvobBbktLGNksptf1giQRw 
------------------------------------------------- 
http://www.google.com/reader/view/?hl=es&tab=Xq&at=RTknd_lBUUnvNqan2641EA 
---------------------------------------------------- 
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&ved=0CEgQFjAE&url=http://www.abc.com/ppp.aspx&ei=dmd0UOO9AYnY4QS1sYGwBw&usg=AFQjCNGIFcJUUSVpl_ZiZoSWDP2LkIagtw 

Il est pratique seulement data.There sont de nombreux cas comme celui-ci. Je veux donc une partie d'url originale avant de compter.

J'utilise cette requête pour obtenir des données.

DECLARE @temp table(RefPage nvarchar(200)) 
insert into @temp 
SELECT 
    CASE CHARINDEX('?', SessionReferer) 
     WHEN 0 THEN SessionReferer 
     ELSE LEFT(SessionReferer, CHARINDEX('?', SessionReferer) - 1) END AS RefPage 
FROM Tracker WHERE [start] between '1-1-2010' and '1-1-2015' and SessionReferer<> '' 

select distinct RefPage, count(*) as [VisitTime] from @temp 
    group by RefPage 
order by [VisitTime] desc 

et mon résultat est:

SessionRefere       VisitTime 
http://www.google.com/url     2 
http://www.google.com/reader/view/  1 

Mais je veux un résultat:

SessionRefere       VisitTime 
http://www.google.com      3 

Est-il possible d'obtenir le résultat du désir ou je suis dans le mauvais sens? Merci.

+0

est-il important pour vous de tronquer l'URL avec SQL uniquement? – Rorchackh

+0

Yap Je le veux en ms-sql. –

+0

Ok. vous voudrez peut-être vérifier ce poste (en particulier le premier scénario http://www.mssqltips.com/sqlservertip/1325/parsing-a-url-with-sql-server-functions/) – Rorchackh

Répondre

2

Essayez de diviser à CHARINDEX('/',SessionReferrer,9)

select 
    case when CHARINDEX('/',SessionReferrer,9) = 0 
    then SessionReferrer 
    else left(SessionReferrer, CHARINDEX('/',SessionReferrer,9)-1) 
    end, 
    count(*) 
from Tracker  
group by 
    case when CHARINDEX('/',SessionReferrer,9) = 0 
    then SessionReferrer 
    else left(SessionReferrer, CHARINDEX('/',SessionReferrer,9)-1) 
    end 

(je suppose paresseusement tous vos référants commencent par http: // ou https: //)

+0

+1 son travail parfait. Merci. –

2

Essayez cette

Declare @T Table(URL Varchar(MAX)) 
Insert Into @T Values('http://www.google.com/url?sa=t&rct=j&q=aaa bbb&source=web&cd=1&cad=rja&sqi=2&ved=0CB4QFjAA&url=http://www.abc.com/&ei=QFR0UM-JKIrQrQfsuoG4CQ&usg=AFQjCNExYcKkcvobBbktLGNksptf1giQRw') 
Insert Into @T Values('http://www.google.com/reader/view/?hl=es&tab=Xq&at=RTknd_lBUUnvNqan2641EA') 
Insert Into @T Values('http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&ved=0CEgQFjAE&url=http://www.abc.com/ppp.aspx&ei=dmd0UOO9AYnY4QS1sYGwBw&usg=AFQjCNGIFcJUUSVpl_ZiZoSWDP2LkIagtw') 
Insert Into @T Values('http://www.yahoo.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&ved=0CEgQFjAE&url=http://www.abc.com/ppp.aspx&ei=dmd0UOO9AYnY4QS1sYGwBw&usg=AFQjCNGIFcJUUSVpl_ZiZoSWDP2LkIagtw') 

;WITH CTE AS 
(
    SELECT 
     URL 
     ,SessionRefere = SUBSTRING(URL,0,CHARINDEX('://', URL)+3) + SUBSTRING(URL,CHARINDEX('://', URL)+3,CHARINDEX('/', SUBSTRING(URL,CHARINDEX('://', URL)+3,LEN(URL)))-1) 
    FROM @T 
) 

SELECT SessionRefere,[VisitTime] = COUNT(SessionRefere) 
FROM CTE 
GROUP BY SessionRefere 

sortie

SessionRefere VisitTime 
http://www.google.com 3 
http://www.yahoo.com 1 
+0

+1 pour utiliser 'With' ses travaux.Merci. –

1

Ici, je fais:

pour une chaîne @test:
je partage la chaîne entre '//' et '/' de l'URL et concatinating http: ou https selon l'URL donnée

Declare @test nvarchar(100) 
Declare @http nvarchar(8) 
set @test = 'http://www.google.com/url?sa=t&rct=j&q=aaa bbb&source=web&cd=1&cad=rja&sqi=2&ved=0CB4QFjAA&url=http://www.abc.com/&ei=QFR0UM-JKIrQrQfsuoG4CQ&usg=AFQjCNExYcKkcvobBbktLGNksptf1giQRw' 
declare @length int 
declare @start int 
declare @subString nvarchar(100) 
set @start =(select CharIndex('//', @test)) 
set @http = SUBSTRING(@test, 0 , @start) 
set @length = Len(@test) 
set @subString = SUBSTRING (@test ,@start+2 , @length) 
set @start =(select CharIndex('/', @subString)) 
set @subString = SUBSTRING (@subString ,0 , @start) 
set @subString = @http+'//'+ @subString 
+0

+1 son travail parfait.Merci beaucoup. –

Questions connexes