2010-08-19 11 views

Odpowiedz

9

W MySQL wyrażenia regularne mogą pasować, ale nie zwracać podciągów.

Można użyć SUBSTRING_INDEX:

SELECT SUBSTRING_INDEX('www.example.com', '/', 1) 

jednak, że nie jest bezpieczny protokół prefiks.

Jeśli używasz mieszankę prefiksem i bez prefiksów URL, skorzystaj z tego:

SELECT url RLIKE '^http://', 
     CASE 
     WHEN url RLIKE '^http://' THEN 
       SUBSTRING_INDEX(SUBSTRING_INDEX(url, '/', 3), '/', -1) 
     ELSE 
       SUBSTRING_INDEX(url, '/', 1) 
     END 
FROM (
     SELECT 'www.example.com/test/test' AS url 
     UNION ALL 
     SELECT 'http://www.example.com/test' 
     ) q 
+1

to jest po prostu powrót http: –

+0

@Alex: jak już powiedziałem w odpowiedzi, to nie jest bezpieczny protokół prefiks. – Quassnoi

0

W oparciu o te odpowiedzi, wymyśliłem si milar rozwiązanie, ale wymaga wielu zapytań.

SELECT SUBSTRING_INDEX(url,'/',1) FROM table WHERE url NOT REGEXP '^[^:]+://'; 
SELECT SUBSTRING_INDEX(url,'/',3) FROM table WHERE url REGEXP '^[^:]+://'; 

Pierwsza kwerenda obsługuje adresy URL bez prefiksu protokołu. Drugie zapytanie obsługuje adresy URL z prefiksem protokołu. Pamiętaj, że nie obsługują one każdego prawidłowego adresu URL, ale powinny obsługiwać najbardziej poprawne adresy URL.

0

SELECT SUBSTRING_INDEX (SUBSTRING_INDEX ('http://www.domain.com/', ': //', -1), '/', 1);

Wynik: www.domain.com

SELECT SUBSTRING_INDEX (SUBSTRING_INDEX (SUBSTRING_INDEX ('http://www.domain.com/' '//', 1) '/', 1), 'www.' -1);

Wynik: domain.com

Powiązane problemy