it-swarm.com.de

Regex in einer MySQL-Abfrage

Ich habe eine einfache Aufgabe, bei der ich einen Datensatz suchen muss, der mit Zeichenfolgen und einer einzelnen Ziffer danach beginnt. Was ich versuche, ist das

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[d]%')

Und

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[0-9]%')

Beide Abfragen geben jedoch immer einen null -Datensatz zurück

trecord
-------
null

Wo als ob ich die folgende Abfrage ausführen würde

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA%')

es kehrt zurück

trecord
-------
ALA0000
ALA0001
ALA0002

Es bedeutet, dass ich Datensätze habe, die mit ALA beginnen, und eine Ziffer danach,

EDIT

Ich mache es mit PHP MySQL und Innodb Engine, um genau zu sein.

41
zzlalani

Ich denke, Sie können REGEXP anstelle von LIKE verwenden

SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')
66
Wietze314

In meinem Fall (Oracle) ist es WHERE REGEXP_LIKE(column, 'regex.*'). Siehe hier :

SQL-Funktion

Beschreibung


REGEXP_LIKE

Diese Funktion durchsucht eine Zeichenspalte nach einem Muster. Verwenden Sie diese Funktion in der WHERE-Klausel einer Abfrage, um Zeilen zurückzugeben, die dem von Ihnen angegebenen regulären Ausdruck entsprechen.

...

REGEXP_REPLACE

Diese Funktion sucht nach einem Muster in einer Zeichenspalte und ersetzt jedes Vorkommen dieses Musters durch das von Ihnen angegebene Muster.

...

REGEXP_INSTR

Diese Funktion durchsucht eine Zeichenfolge nach einem bestimmten Vorkommen eines Musters für reguläre Ausdrücke. Sie geben an, welches Vorkommen Sie suchen möchten und von welcher Startposition aus Sie suchen möchten. Diese Funktion gibt eine Ganzzahl zurück, die die Position in der Zeichenfolge angibt, an der die Übereinstimmung gefunden wurde.

...

REGEXP_SUBSTR

Diese Funktion gibt die tatsächliche Teilzeichenfolge zurück, die dem von Ihnen angegebenen Muster für reguläre Ausdrücke entspricht.

(Natürlich entspricht REGEXP_LIKE nur Abfragen , die den Suchbegriff enthalten. Wenn Sie also eine vollständige Übereinstimmung wünschen, müssen Sie '^$' für eine Übereinstimmung von Anfang (^) und Ende ($), z. B .: '^regex.*$'.)

4
Andrew