Zahlen aus einem Textfeld

Denny78

Grünschnabel
Microsoft SQL Server: Zahlen aus einem Textfeld

Ich hab ein dringendes Problem... Ich möchte aus einem Textfeld, in dem Bemaßungen angegeben sind, Zahlen berechnen.
Um das ganze zu erschweren, wurden die Datensätze nicht einheitlich eingegeben.
Ein Beispiel aus der Datenbank:
1.Datensatz:
B=1.010;H=2.030;H1=1.280;H2=750; 2.Datensatz:
B=990;H=2.125; 3.Datensatz:
B=960;H=1.960;H1=959;H2=1.001; etc.
Ich brauche also z.B. die Höhe (H) für Berechnungen, nur kann ich mir die Zahlen nicht anhand der Feldposition entnehmen, da diese Position in den Datensätzen unterschiedlich sein kann.
Ich hoffe ihr könnt mir mit einer Idee helfen... Schon mal DANKE im Voraus für die Mühe der Überlegung.
Vielleicht noch die Info, dass ich das Ganze über SQL mache. Von Programmierung hab ich leider keine Ahnung...
 
Zuletzt bearbeitet:
DBMS = Microsoft SQL Server , ich hab die Tabellen aber in Access importiert und arbeite dementsprechend mit MS Access, gebe meine Abfragen etc. aber per SQL ein - tu ich mich leichter.
 
Zuletzt bearbeitet:
Also im SQL Server könnte es so gehen:

CREATE FUNCTION udf_SplitChars(@List Varchar(8000), @Sep Char)
RETURNS @t TABLE(Piece varchar (500))
BEGIN
DECLARE @pos smallint
DECLARE @Start SmallInt
SET @List = LTRIM(RTRIM(@List)) + @Sep
SET @pos = CHARINDEX(@Sep, @List,1)
Set @Start=1

WHILE @pos > 1 BEGIN
If (@Pos>@Start) -- Ignore empty delimited strings
INSERT @t VALUES(SubString(@List, @Start,@pos-@Start))
SET @Start=@Pos+1
SET @pos = CHARINDEX(@Sep, @List,@Start)
END
RETURN
END

Diese Funktion zerlegt eine Liste, die mit @SEP getrennt ist in Ihre Einzelwerte, z.B.:
Select *
from dbo.udf_SplitChars ('B=1.010;H=2.030;H1=1.280;H2=750;', ';')
ergibt:

Piece
----------
B=1.010
H=2.030
H1=1.280
H2=750

Und mit
select
Left (Piece, CHARINDEX ('=', Piece)-1) Dimension,
RIGHT (Piece, LEN (Piece) - CHARINDEX ('=', Piece)) Wert
from dbo.udf_SplitChars ('B=1.010;H=2.030;H1=1.280;H2=750;', ';')

erhälst Du

Dimension Wert
---------- ----------
B 1.010
H 2.030
H1 1.280
H2 750

Nu kannste die Einzelwerte nach Bedarf selektieren.
 
Erstmal Danke für deine Mühe.
Korrigiere mich, wenn ich falsch liege: Mit dieser Funktion kann ich spezielle Werte auslesen, soll heißen ich weiß welche Werte ich benötige. Nun will ich aber alle Artikel selektieren, deren Höhe z.B. unter 2.000 liegt. Eigentlich wollte ich mit einer SELECT-Abfrage arbeiten, aber ich kam nicht mal auf einen Lösungsansatz.
 
Genau, ich hatte verstanden, dass Du die EInzelwerte brauchst um weitere Berechnungen vorzunehmen.

Aber egal, wenn Du alle Datensätze mit Höhen < 2.000 suchst, dann brauchst Du doch nur noch eine Where Bedingung hinzufügen:

select
Left (Piece, CHARINDEX ('=', Piece)-1) Dimension,
RIGHT (Piece, LEN (Piece) - CHARINDEX ('=', Piece)) Wert
from dbo.udf_SplitChars ('B=1.010;H=2.030;H1=1.280;H2=750;', ';')


WHERE Left (Piece, CHARINDEX ('=', Piece)-1) LIKE 'H%'
AND RIGHT (Piece, LEN (Piece) - CHARINDEX ('=', Piece)) < 2.000

 
Zurück