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-ID: 96402

Url: https://administrator.de/forum/sql-string-zerlegen-96402.html

Ausgedruckt am: 22.12.2024 um 22:12 Uhr

SvenGuenter
SvenGuenter 08.09.2008 um 17:33:52 Uhr
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
Antos
Antos 09.09.2008 um 08:27:15 Uhr
Goto Top
Vielen Dank SvenGuenter ,
funkt einwandfrei!!

mfg