ho dovuto combinare alcune delle risposte precedenti, oltre a un po 'di più aggiustamenti per il mio set di dati.Questo è ciò che funziona per me, restituisce il dominio e gli eventuali sottodomini:
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain
Spiegazione (causa non banale SQL raramente ha senso):
SUBSTRING_INDEX(target_url, '/', 3)
- strisce qualsiasi percorso se l'URL è un protocollo
SUBSTRING_INDEX(THAT, '://', -1)
- strisce qualsiasi protocollo da CHE
SUBSTRING_INDEX(THAT, '/', 1)
- strisce qualsiasi percorso da CHE (se non ci fosse alcun protocollo)
SUBSTRING_INDEX(THAT, '?', 1)
- strisce la stringa di query da CHE (se non c'era alcun percorso o di discesa /)
Test Cases:
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;
risultati:
'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'
Eventuali duplicati (o almeno molto simili): http://stackoverflow.com/questions/3521094/how-we-can-find-domain-name-using-mysql-and-regular-expression –