sql >> Database teknologi >  >> RDS >> Mysql

Mysql-forespørgsel for at udtrække domæner fra webadresser

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 protokol
SUBSTRING_INDEX(THAT, '://', ​​-1) - fjerner enhver protokol fra THAT
SUBSTRING_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' 


  1. Generer et tilfældigt tal i intervallet 1 - 10

  2. Lagring af ikke-gregorianske datoer i Mysqls datotype

  3. Konfiguration af lageropsætning [fil vs. database]

  4. Hvordan får man den seneste rekord i hver gruppe ved hjælp af GROUP BY?