Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Abfrage zum Extrahieren von Domains aus URLs

Ich musste einige der vorherigen Antworten kombinieren, plus ein bisschen mehr Hackerei für meinen Datensatz. Das funktioniert bei mir, es gibt die Domain und alle Subdomains zurück:

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

Erklärung (weil nicht-triviales SQL selten sinnvoll ist):

SUBSTRING_INDEX(target_url, '/', 3) - Entfernt jeden Pfad, wenn die URL ein Protokoll hat
SUBSTRING_INDEX(THAT, '://', -1) - entfernt jedes Protokoll von THAT
SUBSTRING_INDEX(THAT, '/', 1) - entfernt jeden Pfad von THAT (wenn es kein Protokoll gab)
SUBSTRING_INDEX(THAT, '?', 1) - entfernt die Abfragezeichenfolge von THAT (wenn es keinen Pfad oder abschließendes / gab)

Testfälle:

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; 

Ergebnisse:

'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'