Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie Mysql do wyodrębnienia domen z adresów URL

Musiałem połączyć niektóre z poprzednich odpowiedzi, plus trochę więcej hackingu dla mojego zestawu danych. To działa dla mnie , zwraca domenę i wszelkie subdomeny:

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

Wyjaśnienie (ponieważ nietrywialny SQL rzadko ma sens):

SUBSTRING_INDEX(target_url, '/', 3) - usuwa dowolną ścieżkę, jeśli adres URL ma protokół
SUBSTRING_INDEX(THAT, '://', -1) - usuwa dowolny protokół z TA
SUBSTRING_INDEX(THAT, '/', 1) - usuwa dowolną ścieżkę z TEGO (jeśli nie było protokołu)
SUBSTRING_INDEX(THAT, '?', 1) - usuwa ciąg zapytania z TEGO (jeśli nie było ścieżki lub końcowego / )

Przypadki testowe:

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; 

Wyniki:

'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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Niedozwolona mieszanka zestawień (utf8_unicode_ci,IMPLICIT) i (utf8_general_ci,IMPLICIT) dla operacji '='

  2. Prawdziwy max_execution_time dla PHP na Linuksie

  3. Zainstaluj Mtop (monitorowanie serwera bazy danych MySQL) w RHEL/CentOS 6/5/4, Fedora 17-12

  4. Struktury obiektowe w relacyjnych bazach danych

  5. SCHEMA() Funkcja w MySQL