2009-04-06 17 views
2

In einer MySQL-Datenbank habe ich eine Tabelle, die itemID, itemName und einige andere Felder enthält.MySQL - Extrahieren von Zahlen aus Strings

Beispielsätze (jeweils itemID und itemName):

vaX652bp_X987_foobar, FooBarItem
X34_bar, BarItem
tooX56, TOOX_What

Ich möchte eine Abfrage schreiben, die wie ich eine Ausgabe gibt :

652, FooBarItem
34, BarItem
56, TOOX_What

Mit anderen Worten, ich möchte die Nummer aus der itemID Spalte extrahieren. Die Bedingung ist jedoch, dass die extrahierte Zahl die Nummer ist, die nach dem ersten Auftreten des Zeichens "X" in der Spalte itemID auftritt.

Ich bin derzeit versucht, aus locate() und substring() kann aber (noch) nicht erreichen, was ich will ..

EDIT: nicht auf die Frage - Kann man sehen, alle Antworten (derzeit zwei) auf diese Frage? Ich sehe nur die erste Antwort von "soulmerge". Irgendwelche Ideen warum? Und die Millionen-Dollar-Frage - Habe ich gerade einen Fehler gefunden ?!

+0

Und welche Ausgabe sollten die nächsten zwei Zeilen produzieren? – tpdi

+0

@tpdi: die Frage bearbeitet. –

Antwort

1

Das ist eine schreckliche Sache in mysql zu tun, da es die Extraktion von Regex-Übereinstimmungen nicht unterstützt. Ich würde eher empfehlen, die Daten in die Sprache Ihrer Wahl zu ziehen und dort zu verarbeiten. Wenn Sie wirklich müssen tun dies in mysql, mit unlesbaren Kombinationen von LOCATE und SUBSTRING mit mehreren CASE s ist das einzige, was ich mir vorstellen kann.

1

Warum versuchen Sie nicht, eine dritte Spalte zu machen, in der Sie speichern können, im Moment des Einfügens des Datensatzes (Trennen der Zahl in PHP oder so), die Zahl allein. Auf diese Weise nutzen Sie ein wenig mehr Speicherplatz, um viel Verarbeitungsaufwand zu sparen.

Tabelle:

vaX652bp_X987_foobar, 652, FooBarItem

X34_bar, 34, BarItem

tooX56, 56, TOOX_What

1

Dies ist nicht so unlesbar:

SELECT 0+SUBSTRING(itemID, LOCATE("X", itemID)+1), itemName FROM tableName 
Verwandte Themen