antos
Goto Top

SQL String zerlegen

Hat einer ne Idee wie ich am besten 'n String zerhack? MSSQL

Hallo zusammen,

ich steh vor folgender Herausforderung. Ich hab eine Tabelle in der sich eine Spalte string befindet. Ein Wert sieht z.B. so aus:

AWUVUZ,30-0-0,PräfEG,AE-MiK

oder

AWUVUZ,PräfEG,AE-MiK,60-0-0,Z4-PU

Ich brauche jetzt aus dem String den "Zahlenwert". Also aus dem ersten '30-0-0', aus dem zweiten '60-0-0' für eine Abfrage in einer anderen Tabelle.
Hat einer eine Idee wie ich jeweils die Substring's von Komma zu Komma auslesen kann?

erstens = substring(SPALTE, 0, CHARINDEX(',', SPALTE))

gibt mir leider nur den String bis zum ersten Komma aus, keine Ahnung wie ich da ein Komma weiterspringen kann.
Das zweite wäre evtl. mit LEFT-RIGHT zu bewerkstelligen, aber die Anzahl der Kommas sind nicht festgelegt.Daher mal 5, mal 3 usw.
Für Tipps bin ich dankbar!
mfg
Antos

Content-Key: 96402

Url: https://administrator.de/contentid/96402

Printed on: April 23, 2024 at 11:04 o'clock

Member: SvenGuenter
SvenGuenter Sep 08, 2008 at 15:33:52 (UTC)
Goto Top
Versuch mal diese Funktion. Einfach anlegen und string übergeben

CREATE FUNCTION [dbo].[splitfunction]
(
 @Position INTEGER,
 @List VARCHAR(2000),  
 @Delimiter VARCHAR(1)
)
RETURNS VARCHAR(2000) 
AS
BEGIN
 DECLARE @RetVal VARCHAR(2000) SET @RetVal = ''    
 DECLARE @Counter  INT SET @Counter = 0
 DECLARE @StartPos INT
 DECLARE @Length INT
 DECLARE @DelimPos INT SET @DelimPos = 0

 WHILE @Counter < @Position
  BEGIN
   SET @Counter = @Counter + 1   -- zaehler
   SET @StartPos = @DelimPos + 1 -- startposition
   SET @DelimPos = CHARINDEX(@Delimiter,@List,@DelimPos + 1)   --nächsten Delimiter finden
   
   IF @DelimPos = 0
   BEGIN
    
    IF @Counter = @Position SET @Length = (LEN(@List)+1)-@StartPos

    ELSE SET @Length = -1
   END
   ELSE SET @Length = @DelimPos - @StartPos  
  END
  -- Rückgabe des Strings
  IF @Length > 0 SET @RetVal = SUBSTRING(@List,@StartPos,@Length)
  RETURN @RetVal
END
Member: Antos
Antos Sep 09, 2008 at 06:27:15 (UTC)
Goto Top
Vielen Dank SvenGuenter ,
funkt einwandfrei!!

mfg