RegEx in MySql Statement funktioniert nicht

Maris

Aktiver Benutzer
Beiträge
32
Hallo zusammen,

ich brauche eine Hilfestellung:

Dieses Statement liefert immer 0 Ergebnisse zurück. Kann mir jemand sagen warum?

SELECT transactionID, internalcomment, ordernumber FROM s_order
WHERE transactionID = '' AND paymentID = '10'
AND internalcomment REGEXP '\w\d{2}-?\d{7}-?\d{7}'

Im internalcomment steht sowas drin:

magnalister-Verarbeitung (Amazon)Marketplace Bestellnummer: 306-3584295-9664328** BUSINESS ORDER **Purchase Order Number:

Mit einem Regextester habe ich auch schon die Bestellnummer erfolgreich extrahieren können: 306-3584295-9664328

Nur nach dem Ausführen des Statements kommt immer kein Ergebnis.

Viele Grüße
Christian
 
Werbung:
Ok. Ich habe es mit UPDATE und einer Helfer Spalte versucht. Klappt nicht:

UPDATE `s_order`
SET `helper` = Replace(`internalcomment`,'','\w\d{2}-?\d{7}-?\d{7}')
WHERE `ordernumber` = '51598' AND `internalcomment` REGEXP '\w\d{2}-?\d{7}-?\d{7}'

Jemand eine Idee wir ich die Bestellnummer in die Helper Spalte bekomme?
 
Habs auch mit einem Substring versucht... SQL beachtet den REgEx nicht. Bin Anfänger. Hilfe wäre nicht schlecht :-/

SELECT internalcomment, SUBSTRING_INDEX(`internalcomment`, '\w\d{2}-?\d{7}-?\d{7}', 1) AS Bestellnummer
FROM s_order
WHERE `ordernumber`='51598'
 
Du wirst im WHERE das vergleichen müssen. Schnellschuß:

Code:
test=*# select 'magnalister-Verarbeitung (Amazon)Marketplace Bestellnummer: 306-3584295-9664328** BUSINESS ORDER **Purchase Order Number:' ~ '\w\d{2}-?\d{7}-?\d{7}';
 ?column?
----------
 t
(1 row)

das liefert also TRUE und könnte so im WHERE verwendet werden (der Text aus der Spalte natürlich).


Andreas
 
Ich habe jetzt auf MariaDB gewechselt aber ich bekomme es nicht hin die Ordernummer die ich per Regex extrahiere in eine ander Spalte zu importieren. Bin am verzweifeln und über jeden Tipp dankbar.
 
ach so, du willst quasi diese Nummer da ausschneiden?

Code:
test=*# select regexp_matches('magnalister-Verarbeitung (Amazon)Marketplace Bestellnummer: 306-3584295-9664328** BUSINESS ORDER **Purchase Order Number:','\w\d{2}-?\d{7}-?\d{7}','');
    regexp_matches     
-----------------------
 {306-3584295-9664328}
(1 row)

PostgreSQL. Die Klammern da bekommt man sicher auch noch weg ...
 
Ja. Ich habe das versucht: Aber das klappt nicht:

INSERT INTO s_order(textval,helper)

SELECT internalcomment AS textval,REGEXP_REPLACE (internalcomment,'\w\d{2}-?\d{7}-?\d{7}', '') AS helper
FROM s_order

Möglicherweise ist das Statement einfach falsch. Ich bin nicht so fit. Aber das sollte doch möglich sein, die Nummer in die Spalte helper geschrieben zu bekommen.
 
regexp_replace ersetzt den Text, bei Dir durch ''. Den Treffer, 'matches', bekommst Du damit nicht. Die Frage, ob MySQL oder Inkarnationen davon das können, matcht grade bei mir nicht ...
 
Hi, ich habe jetzt schon mal ein funktionierendes Statement gebastelt:

UPDATE s_order
SET helper = regexp_replace(internalcomment, '\w\d{2}-?\d{7}-?\d{7}', '')
WHERE ordernumber = '50157'

MariaDB in der Version 10.2 sollte das eigentlich können. Mit diesem Statement wird allerdings der gesamte Text aus internalcomment kopiert. Statt nur der Auszug. Irgendwas mache ich falsch. Schade das so wenig Leute mir einen Tipp geben. Vielleicht sollte ich mir ein anderes Forum suchen.

Grüße
Christian
 
Dieses Statement funktioniert und liefert nur die Nummer.

SELECT transactionID, internalcomment, ordernumber
FROM s_order
WHERE transactionID = '' AND paymentID = '10'
AND regexp_replace(internalcomment, '\w\d{2}-?\d{7}-?\d{7}', '')

Jetzt müßte ich das Ergebnis nur in die Spalte helper geschrieben werden. Das funktioniert mit:

UPDATE s_order
SET helper = regexp_replace(internalcomment, '\w\d{2}-?\d{7}-?\d{7}', '')

leider nicht.

Ist das Statement für die UPDATE Funktion falsch?
 
in Deinem Select liefert das regexp_replace irgend etwas, was MySQL dann wohl als logisch WAHR interpretiert. An sich ist es so wie es dasteht Bullshit, in PG würde es einen Fehler geben:

Code:
test=*# create table foo(t  text);
CREATE TABLE
test=*# insert into foo values ('test');
INSERT 0 1
test=*# select regexp_replace(t, 'es','') from foo;
 regexp_replace
----------------
 tt
(1 row)

test=*# select * from foo where regexp_replace(t, 'es','');
FEHLER:  Argument von WHERE muss Typ boolean haben, nicht Typ text
LINE 1: select * from foo where regexp_replace(t, 'es','');
                                ^
test=*#

Wir sehen mal wieder: MySQL ist doof.

Du machst jetzt mal ein Select mit deinem Regex da und schaust Dir an, was bei rauskommt.
 
Werbung:
ich kenne mich mit PostgreSQL nicht aus. Für mich ist das alles nur Bahnhof. Vorallem was muss ich mit sql anders machen. Ich verstehe es einfach nicht.
 
Zurück
Oben