String teilen

winscheil

Aktiver Benutzer
Beiträge
25
Hallo,

ich habe in einer Tabelle eine Spalte mit folgenden Aufbau:
Artikel Position
5-123 1
5-456 1.1
5-789 1.1.1
5-666 1.2
5-767 1.2.1
usw.
5-999 1.2.40.190.30.410.401

Ich möchte die Spalte Position zerlegen in die einzelnen Unterpositionen und diese jweils in eine neue Spalte einfügen.
Die Unterpositionen sind jeweils durch einen Punkt unterteilt.
Also so:
Artikel Position P1 P2 P3 P4 P5 P6 P7
5-123 1 1
5-456 1.1 1 1
5-789 1.1.1 1 1 1
5-666 1.2 1 2
5-767 1.2.1 1 2 1
usw.
5-999 1.2.40.190.30.410.401 1 2 40 190 30 410 401

Könnt Ihr mir bei meinem Problem weiterhelfen?
 
Werbung:
Klar, ist aber schwer daher vorab ein paar Fragen:

1) Ist wirklich MSSQL kein MySQL oder?
2) Die sind nicht immer durch Punkte getrennt, in einigen Datensätzen scheinen Leerschritte zu stehen. Ist das tatsächlich so oder nur fusch deiner Seits?
3) Wieviele Unterpositionen gibt es maximal?
 
Es ist MSSQL.
Die Darstellung meines gewünschten Ergebnisses ist schlecht. Dadurch sieht es aus, als ob es Positionen auch mit Leerzeichen gibt.
Wenn eine Position z.B. 1.2.10.140.2 ist
Dann will ich diese Position in ihre Unterpositionen unterteilen und in die jeweilige Spalte reinschreiben.
d.h. hier Position: 1.2.10.140.2
Spalte P1 : 1
Spalte P2: 2
Spalte P3: 10
Spalte P4: 140
Spalte P5: 2

Ich hoffe, ich konnte es so richtig erklären.
Das ist die längste Position:
1.3.800.810.40.250.1104.402
Also 7 Punkte somit acht Unterpositionen
 
Da du die Unterpositionen wieder in Spalten haben willst würde ich eine Funktion vorschlagen:
Code:
CREATE FUNCTION [dbo].[zerlegung](@string VARCHAR(100),@i SMALLINT)
RETURNS VARCHAR(100)
AS

BEGIN
   WHILE   @i > 1
   BEGIN
     SET     @i = @i - 1
     IF     @string LIKE '%.%'
     BEGIN
       SET     @string = right(@string,len(@string)-charindex('.',@string))
     END
     ELSE
     BEGIN
       SET     @string = NULL
     END
   END
   IF     @string LIKE '%.%'
   BEGIN
     SET     @string = left(@string,charindex('.',@string)-1)
   END

   RETURN   @string;
END;
GO
Damit könntest du dann im Select alle Spalten gezielt aufrufen:
Code:
SELECT [dbo].[zerlegung](spalte,1) AS P1,[dbo].[zerlegung](spalte,2) AS P2,[dbo].[zerlegung](spalte,3) AS P3,[...] FROM tabelle
 
Werbung:
Zurück
Oben