verwendetes Datenbanksystem: Sybase
Hallo,
ich möchte gerne ein Regularexpression, der mir alle Zahlen einer Zeichenkette ausgibt in einem String. Aber ohne Array.
Beispiel
0147 / 4589 -> 01474589
1567 0789 458 -> 15670789458
16789 -> 16789
ich habe schon herum probiert, kenne mich aber nicht gut mit Regex aus. Ich bekomme immer nur den ersten Block.
Gruß dat Tala
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
hilft mir leider nicht weiter. Habe ich schon überflogen.
Gruß dat Tala
Habe ich schon überflogen.
Du bist jetzt lang genug hier, Du kennst [Hinweis] Wie poste ich richtig? Punkte 4*. Die gelten auch für Dich.
Und das, was Du vor hast, kriegt man raus, wenn man sichs 10 Min richtig anschaut.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Für so eine triviale Aufgabe würde ja auch String.Replace reichen.
Mit Regex z.B. so, um alle nicht-Zahlen zu entfernen:
var s = Regex.Replace("1567 / 0789 458", @"[^\d]", "");
Hi,
so trivial wie ihr es darstellt ist es nicht.
Denn. Es muss in einem SQL-Select verwendet werden ohne Replacefunktion. Die Funktion heißt REGEXP_SUBSTR. Ich habe also nur das Find zur Verfügung. Ich kann an der Stelle auch keine eigene Funktion einbauen, da die Rechte für die ausführenden dies nicht erlauben.
Die RegExp_Substr verhält sich wie eine normale RegEx-Find Methode, die allerdings nur das erste Element aus dem Sucharray zurück liefert. Dadurch erhalte ich ein "\d" nur immer den ersten Block (s.o.).
Gruß dat Tala
Hi,
Es muss in einem SQL-Select verwendet werden ohne Replacefunktion. Die Funktion heißt REGEXP_SUBSTR Warum sagst Du das nicht gleich, woher sollen wir das wissen?
Ist das Oracle? Vllt
SELECT REGEXP_SUBSTR(mycolumn, '[0-9]+')
?
Du hast es gerade selber geschrieben das Du nur den ersten block findest.
Sind die unerwünschten Zeichen zwischen den Ziffern nur wenige verschiedene? Also vllt nur ' ', ',' ,'/'? Dann könnte man sie mit REPLACE herausfiltern
SELECT REPLACE(REPLACE(mycolumn, ' ', ''), '.', '') ...
?
Wie ich schon oben geschrieben habe, würde ich es mit Regex Replace lösen.
Da du scheinbar Sybase verwendest (wie im ersten Beitrag genannt), wäre das hier wohl eine Möglichkeit dazu: http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc01612.0500/doc/html/emc1296250530909.html
Evtl. ist mein code von oben so übertragbar:
regexp_replace(DEIN_SPALTENWERT, '[^\d]', '')
hi,
es gibt leider keine Replace Variante für Regularexpressions bei Sybase 12. Daher fällt diese Option flach. Ich vermute es geht ein Weg an einer Funktion vorbei.
Gruß dat Tala