2010-08-19 3 views

Antwort

9

In MySQL können reguläre Ausdrücke zwar übereinstimmen, aber keine Teilzeichenfolgen zurückgeben.

können Sie SUBSTRING_INDEX verwenden:

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

, ist es jedoch nicht Protokoll ist Präfix sicher.

Wenn Sie eine Mischung aus dem Präfix und ohne Präfix URL ‚s arbeiten, verwenden Sie diese:

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

es nur http zurückkehrt: –

+0

@ Alex: wie ich in der Antwort schon gesagt, es ist nicht Protokollpräfix sicher. – Quassnoi

0

auf diese Basierend Antworten, ich kam mit einem si Milar Lösung, aber es erfordert mehrere Abfragen.

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

Die erste Abfrage verarbeitet URLs ohne Protokollpräfix. Die zweite Abfrage behandelt URLs mit einem Protokollpräfix. Bitte beachten Sie, dass diese nicht jede gültige URL behandeln, sondern die meisten richtigen URLs verwenden sollten.

0

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

Ergebnis: www.domain.com

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

Ergebnis: domain.com