MySQL Abfrage von Werten mit "2 gleichen Buchstaben" im Wort

marspoki

Neuer Benutzer
Beiträge
2
Hallo Ihr Profis,

ich habe mal eine Frage.

Ist es möglich, eine MySQL suche so zu schreiben das ich Wörter finde in denen z.B. 2x der Buchstabe a enhalten ist ?

SELECT * FROM staedte WHERE stadt REGEXP 'a{2}' <-findet ja z.B. doppel aa / das will ich aber nicht

SELECT * FROM staedte WHERE stadt LIKE '%a%' AND stadt Like '%a%' <- ist ja auch quatsch weil er ja auch Mannheim anzeigen tut.

Ich möchte gern z.B. Ballhausen finden und nicht z.B. Mannheim.


Ist so etwas möglich?

Vielen Dank und Viele Grüße
Klaus
 
Werbung:
Hallo Klaus,

ich würde da REGEXP nehmen. Damit kannst du die Eigenschaften "einfach" angeben.
Was mir noch nicht klar ist, ob du auch Worte mit "aaxxxxxxa" finden möchtest.
Hier einmal einige Beispiele:

Code:
SELECT * FROM staedte WHERE stadt REGEXP 'a[^a]*a';

Code:
mysql> SELECT stadt, stadt REGEXP 'a[^a]*a' FROM staedte;


+----------+------------------------+
| stadt    | stadt REGEXP 'a[^a]*a' |
+----------+------------------------+
| abc      |                      0 |
| abca     |                      1 |
| aabbcc   |                      1 |
| aabbcca  |                      1 |
| aabbccaa |                      1 |
+----------+------------------------+
5 rows in set (0.00 sec)

mysql>

Hier bedeutet der reguläre Ausdruck:
a: Übereinstimmung mit dem Buchstaben 'a'.
[^a]*: Übereinstimmung mit null oder mehr Vorkommen von beliebigen Zeichen außer 'a'.
a: Übereinstimmung mit dem Buchstaben 'a'.

Wenn du nun noch ausschließen möchtest das überhaupt einmal "aa vorkommt kannst du folgendes angeben

Code:
SELECT * FROM staedte WHERE stadt REGEXP '^(?!.*aa).*a[^a]*a.*$';


Code:
mysql> SELECT stadt, stadt REGEXP '^(?!.*aa).*a[^a]*a.*$'  FROM staedte;

+----------+--------------------------------------+
| stadt    | stadt REGEXP '^(?!.*aa).*a[^a]*a.*$' |
+----------+--------------------------------------+
| abc      |                                    0 |
| abca     |                                    1 |
| aabbcc   |                                    0 |
| aabbcca  |                                    0 |
| aabbccaa |                                    0 |
+----------+--------------------------------------+
5 rows in set (0.00 sec)

mysql>

Die Bedeutung dazu ist:

^: Start des Strings.
(?!.*aa): Negative lookahead Assertion, die sicherstellt, dass "aa" im gesamten String nicht vorkommt.
.*: Beliebige Anzahl von Zeichen.
a: Ein 'a'.
[^a]*: Null oder mehr beliebige Zeichen außer 'a'.
a: Ein weiteres 'a'.
.*: Beliebige Anzahl von Zeichen.
$: Ende des Strings.
 
Werbung:
Zurück
Oben