# MY SQL Suche durch Teilstring



## Schrödi (7. November 2008)

Hallo zusammen,

MySQL bietet ja das PatternMatching:


```
SELECT * FROM tabelle 
WHERE rufnummer = '$rufnummer'%
```
D.h, dass er mir die gespeicherte Nummer 123456 schon ausschmeißt, wenn ich nur nach 1234 suche.

Nun möchte ich das ganze allerdings umgekehrt haben:

Gespeichert ist die Nummer 1234 und ich suche nach 123456.
Nun möchte ich, dass er mir auch die 1234 findet, wenn ich aber nach 123 suche, er nichts ausspuckt.

Logisch betrachtet also auf diese Art:


```
SELECT * FROM tabelle 
WHERE rufnummer% = '$rufnummer'
```
Das wäre aber ja zu einfach 

Gruß André


----------



## planb2000 (7. November 2008)

Hallo,

schau Dir mal den LIKE operator an.


```
-- Finde alle Nr. mit 1234 im prefix
SELECT * FROM tabelle WHERE LIKE '1234%'

-- Finde alle Nr. mit 1234 im suffix
SELECT * FROM tabelle WHERE LIKE '%1234'


-- Finde alle Nr. mit mit einer 2 
SELECT * FROM tabelle WHERE LIKE '%2%'

-- -- Finde alle Nr. mit einer 4 an 4er stelle
SELECT * FROM tabelle WHERE LIKE '____4%'
```

Hoffe das hilft 

Grüße


----------



## Schrödi (7. November 2008)

Hallo planb2000,

danke für deine Antwort, hilft jedoch nicht weiter.

Habe den LIKE, wie auch den REGEXP Operator in allen mir sonnvoll erscheinenden Kombinationen durchexerziert. 

Dies ergab keine Lösung in die Richtung, die ich benötige. Beide Operatoren scheinen nur sonnvoll zu sein, wenn der Suchstring ein Teil des in der DB Befindlichen ist, jedoch nicht umgekehrt.

Gruß Schrodi


----------



## planb2000 (8. November 2008)

Hallo,
Dann könnte instr() Dir helfen?
c1 steht in der tabelle und hat den wert '1234'

```
select *, 'null' as type 
from 
 ( select instr('123' , c1) flag, c1 from t )a
where flag > 0
union

select * , 'treffer' as type 
from 
 ( select instr('123456' , c1) flag, c1 from t )b
where flag > 0
```

Hilft das ?

Grüße


----------



## Schrödi (8. November 2008)

Bingo.

Das hat geholfen. Danke dir.


```
SELECT * FROM tabelle 
WHERE instr('$suchstring', rufnummer)
```

Das bringt genau das Ergebnis, das ich gebraucht habe.

Wie sieht es denn mit der Performance dieser Funktion aus. 
Die Datenbank wird mit ca. 60000 Einträgen pro Jahr schnell wachsen und sehr groß werden.

Gruß Andre


----------

