2016-03-24 19 views
1

Ich brauche Hilfe einer MySQL-Regexp SuchmusterMySQL REGEXP mehrzeiligen Text

In einer Tabelle zu schreiben, ich habe ein mehrzeiliges Textspalte, zum Beispiel:

Row 1

4926 
1615 
3872 
248 

Reihe 2

13872;100=HA&ee 

Row 3

38726;100=HA&ee 

Row 4

3872 

Row 5

248 
3872;100=VA 
4926 
1615 

Row 6

3872; 
248 
4926 

Ich möchte die Werte auswählen, die mindestens eine Zeile genau mit "3872" beginnen. In unseren Beispielen wären die korrekten Ergebnisse Zeile 1, 4, 5 und 6.

Danke für Ihre Hilfe!

+0

Sie benötigen die Zeilennummern oder den gesamten Wert der Zeile mit 3872? –

Antwort

1

Verwenden Sie den folgenden REGEXP Ausdruck:

REGEXP '(^|\n)[[:<:]]3872[[:>:]]' 

Demo:

mysql> SELECT 
    -> '4926 
    '> 1615 
    '> 3872 
    '> 248' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `1`, 
    -> '13872;100=HA&ee' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `2`, 
    -> '38726;100=HA&ee' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `3`, 
    -> '3872' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `4`, 
    -> '248 
    '> 3872;100=VA 
    '> 4926 
    '> 1615' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `5`, 
    -> '3872; 
    '> 248 
    '> 4926' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `6`, 
    -> '100;3872=VA' REGEXP '(^|\n)[[:<:]]3872[[:>:]]' AS `7`; 
+---+---+---+---+---+---+---+ 
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 
+---+---+---+---+---+---+---+ 
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 
+---+---+---+---+---+---+---+ 
1 row in set (0.00 sec) 
+0

Excellent.Aber was, wenn ich nur übereinstimmen möchte, wenn 3872 am Anfang einer Zeile ist? Zum Beispiel darf dies nicht übereinstimmen: 100; 3872 = VA – Jeremy

+0

Das AN wurde aktualisiert, um den von Ihnen erwähnten Fall zu behandeln. –

+0

Ist '[[: <:]]' nicht redundant, da ihm '' (^ | \ n) 'vorangestellt ist, was aber kein Wortzeichen ist? – geon

0

Basierend auf Dylan Su Antwort, hier ist das, was ich tue:

SELECT * FROM `table` 
where value REGEXP '(\r\n|^)[[:<:]]3872[[:>:]]' 

Vielleicht gibt es eine elegante Art und Weise.

Vielen Dank alle