Jeg var nødt til at kombinere nogle af de tidligere svar plus lidt mere hackeri til mit datasæt. Dette er hvad der virker for mig, det returnerer domænet og eventuelle underdomæner:
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domæne
Forklaring (årsag ikke-triviel SQL giver sjældent mening):
SUBSTRING_INDEX(target_url, '/', 3)
- fjerner enhver sti, hvis url'en har en protokolSUBSTRING_INDEX(THAT, '://', -1)
- fjerner enhver protokol fra THATSUBSTRING_INDEX(THAT, '/', 1)
- fjerner enhver sti fra THAT (hvis der ikke var nogen protokol )SUBSTRING_INDEX(THAT, '?', 1)
- fjerner forespørgselsstrengen fra THAT (hvis der ikke var nogen sti eller efterfølgende / )
Testtilfælde:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(target_url, '/', 3), '://', -1), '/', 1), '?', 1) AS domainFROM ( VÆLG 'http://test.com' som target_url UNION VÆLG 'https://test.com' UNION VÆLG 'http://test.com/one' UNION VÆLG '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;
Resultater:
'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'