Text bis zu Zeichen X ausgeben, danach abschneiden

funkyice

Benutzer
Beiträge
21
Hallo zusammen,

bin in unserem Unternehmen neben Marketing-Aktivitäten auch für den Bereich IT verantwortlich und muss mich mit SQL-Abfragen für diverse Auswertungen kümmern. Mit Basisgrundwissen und Google bin ich bislang schon weit gekommen, doch jetzt finde ich weder eine Lösung, noch komme ich selbst darauf.

Ausgangslage ist ein Textfeld, in dem folgendes stehen kann:
  • 517 € Umsatz
  • 218,- € Umsatz
  • 1.120 €

Ich brauche eine Abfrage, die mir nur die Zahlenwerte ausgibt und den Rest außen vorlässt.
Ich hatte es zunächst mit LEFT(...) versucht, aber auch das brachte mich nicht weiter, weil die Anzahl der Zeichen variabel ist. Auch die Länge zu Messen funktioniert nicht, weil ich nicht weiß, wie man die Zeichen bis zu einem bestimmten Wert zählen kann.

Bin für Tipps und Hinweise dankbar!
Sebastian
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.423
Ausgangslage ist ein Textfeld, in dem folgendes stehen kann:
- 517 € Umsatz
- 218,- € Umsatz
- 1.120 €

Ich brauche eine Abfrage, die mir nur die Zahlenwerte ausgibt und den Rest außen vorlässt.
Ich hatte es zunächst mit LEFT(...) versucht, aber auch das brachte mich nicht weiter, weil die Anzahl der Zeichen variabel ist. Auch die Länge zu Messen funktioniert nicht, weil ich nicht weiß, wie man die Zeichen bis zu einem bestimmten Wert zählen kann.

Bin für Tipps und Hinweise dankbar!
Sebastian

In PG:

Code:
test=*# select regexp_replace('- 1.120 €','[^0-9.]','','g');
 regexp_replace
----------------
 1.120
(1 row)

sicherlich hat der M$SQL was ähnliches. Davon abgesehen: verwende passende Datentypen, dann stellen sich solche und ähnliche Probleme gar nicht erst.
 

ukulele

Datenbank-Guru
Beiträge
4.582
Ich meine mich zu erinnern das MSSQL replace() nicht mit Pattern (also [0-9] etc.) umgehen kann. Man müsste also mit mehreren replace() arbeiten und vor allem muss man sich im klaren darüber sein was alles vorkommen kann und schön gegenprüfen.
Code:
SELECT    replace(replace(replace(replace(replace(replace('- 1.120,- € Umsatz','- ',''),',',''),'.',''),'€',''),' ',''),'Umsatz','');
 
SELECT    *
FROM    tabelle
WHERE    isnumeric(replace(replace(replace(replace(replace(replace(spalte,'- ',''),',',''),'.',''),'€',''),' ',''),'Umsatz','');) = 0
 

funkyice

Benutzer
Beiträge
21
Und nur um das klarzustellen, die vorangehenden "-" waren nur Aufzählungsstriche... ;-)
Ansonsten gibt es keine elegantere Lösung? Bei den ganzen "replace" und "()" wird einem schwindelig!
 

Benutzer0000

Benutzer
Beiträge
13
In Sql fällt mir derzeit keine lösung ein (jedenfalls eine elegante, die funktioniert), aber ich könnte dir eine kleine Brücke anbieten. Ich könnte dir einen einfachen VB Code schreiben, der dir diese Zeichen entfernt, somit du die Zahlen alleine in der Tabelle stehen hast

MFG
 
Werbung:
Oben