Ho dovuto combinare alcune delle risposte precedenti, oltre a un po' più di hackeraggio 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 (perché SQL non banale raramente ha senso):
SUBSTRING_INDEX(target_url, '/', 3) - elimina qualsiasi percorso se l'URL ha un protocolloSUBSTRING_INDEX(THAT, '://', -1) - rimuove qualsiasi protocollo da QUELSUBSTRING_INDEX(THAT, '/', 1) - rimuove qualsiasi percorso da QUEL (se non esisteva il protocollo)SUBSTRING_INDEX(THAT, '?', 1) - rimuove la stringa di query da QUELLO (se non c'era percorso o finale / )
Casi di prova:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domain
FROM (
SELECT 'https://test.com' as target_url
UNION SELECT 'https://test.com'
UNION SELECT 'https://test.com/one'
UNION SELECT 'https://test.com/?huh'
UNION SELECT 'https://test.com?https://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=https://maaaaannn'
UNION SELECT 'https://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'