2017-12-23 3 views
1

Ich bin mit einem Problem stecken, ich bin ein Anfänger in MySQL und ich wurde zugewiesen, um eine Abfrage zu erstellen, die Werte von URL-Adressen extrahiert. Also im Grunde habe ich Tausende von URL-Adressen wie diese zum Beispiel https://www.google.com/search?source=, wo ich alles aus dem letzten '/' bis zum ersten '?' Extrahieren muss (in diesem Fall 'Suche'). Und es ist nicht so einfach, manchmal ist es http, manchmal ist die Anzahl der '/' Zeichen nicht die gleiche und manchmal ist eine fehlerhafte Adresse (ich muss diese Fälle ignorieren) und manchmal habe ich einen Fall, wo ich eine regelmäßige https://google.com/search und nein habe ‚?‘ (müssen diese Fälle auch ignoriert werden. ich bin hier, aber ich fühle mich hilflos, irgendwelche Vorschläge?Wählen Sie aus bestimmten Zeichen bis zu bestimmten Zeichen nur, wenn die Bedingung erfüllt ist mysql?

select distinct SUBSTRING_INDEX(col,'/',0) col from table where length(col) - length(replace(col, '/', '')) >= 1 
     and length(col) - length(replace(col, '?', '')) >= 1 
       and col = 'value' 
        and col <> '' 
         and col is not null 
         order by date 
         limit 600; 
+0

Proben von sowohl gültigen als auch ungültigen Daten bereitstellen, dann manuell vorbereiten und das gewünschte Ergebnis aus diesen Daten bereitstellen. –

Antwort

0

Test auf das Fragezeichen zuerst. Dann, wenn das existiert eine Teilkette auf diese Position verwenden , umgekehrt, die „vor Schrägstrich an dem?“, ausfindig zu machen und dann kann ich den Teil der uRL extrahieren, wenn ich weiß, wo das/ist und das ist:

select 
    url 
, substr(url,1,qmarkpos-1) 
, case when qmarkpos > 0 then instr(reverse(substr(url,1,qmarkpos-1)),'/') end 
, substr(substr(url,1,qmarkpos-1),qmarkpos-instr(reverse(substr(url,1,qmarkpos-1)),'/'),qmarkpos) 
from (
     select url, instr(url,'?') qmarkpos 
     from (
      select 'https://www.google.com/search?source=' as url union all 
      select 'https://www.google.com/search' as url union all 
      select 'https://www.google.com/search?source=uqu iqu iugqidug iqugd' as url union all 
      select 'https://www.google.com/search?source/qh ohqod hi=' as url    
      ) d 
    ) d2 

+---+-------------------------------------------------------------+-------------------------------+--------------+---------+ 
| |        url        | substr(url,1,qmarkpos-1) | case ... end | result | 
+---+-------------------------------------------------------------+-------------------------------+--------------+---------+ 
| 1 | https://www.google.com/search?source=      | https://www.google.com/search | 7   | /search | 
| 2 | https://www.google.com/search        |        | NULL   |   | 
| 3 | https://www.google.com/search?source=uqu iqu iugqidug iqugd | https://www.google.com/search | 7   | /search | 
| 4 | https://www.google.com/search?source/qh ohqod hi=   | https://www.google.com/search | 7   | /search | 
+---+-------------------------------------------------------------+-------------------------------+--------------+---------+ 

Demo

+0

Entschuldigen Sie die Umformulierung, von 'https://www.google.com/search?source=' muss ich www.google.com extrahieren, dh alles vom Anfang bis Ende entfernen: // einschließlich: // bis zum ? oder wenn das? ist nicht alles von www.google.com/ bis zu 250 Zeichen vorhanden. @Used_By_Already – Gudzo

+0

Nicht sicher, für was dieser Kommentar ist. –

Verwandte Themen