sql >> Databasteknik >  >> RDS >> Mysql

Mysql-fråga för att extrahera domäner från webbadresser

Jag var tvungen att kombinera några av de tidigare svaren, plus lite mer hackeri för min datamängd. Detta är vad som fungerar för mig, det returnerar domänen och eventuella underdomäner:

SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain

Förklaring (orsak icke-trivial SQL är sällan vettigt):

SUBSTRING_INDEX(target_url, '/', 3) - tar bort alla sökvägar om webbadressen har ett protokoll
SUBSTRING_INDEX(THAT, '://', -1) - tar bort alla protokoll från THAT
SUBSTRING_INDEX(THAT, '/', 1) - tar bort alla sökvägar från THAT (om det inte fanns något protokoll )
SUBSTRING_INDEX(THAT, '?', 1) - tar bort frågesträngen från THAT (om det inte fanns någon sökväg eller efterföljande / )

Testfall:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain
FROM ( 
    SELECT       'http://test.com' as target_url 
    UNION SELECT 'https://test.com' 
    UNION SELECT 'http://test.com/one' 
    UNION SELECT 'http://test.com/?huh' 
    UNION SELECT 'http://test.com?http://ouch.foo' 
    UNION SELECT 'test.com' 
    UNION SELECT 'test.com/one'
    UNION SELECT 'test.com/one/two'
    UNION SELECT 'test.com/one/two/three'
    UNION SELECT 'test.com/one/two/three?u=http://maaaaannn'
    UNION SELECT 'http://one.test.com'
    UNION SELECT 'one.test.com/one'
    UNION SELECT 'two.one.test.com/one' ) AS Test; 

Resultat:

'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'test.com'
'one.test.com'
'one.test.com'
'two.one.test.com'


  1. SQL Server ( MSSQL DBA ) Databashandledning för nybörjare databasadministratörer

  2. Radnummer med icke-deterministisk ordning

  3. Hur hittar man dubbletter av rader i SQL?

  4. Bör varje främmande SQL Server-nyckel ha ett matchande index?