Frage

ich mit einem ärgerlichen Datenbank zu tun habe, wo ein Feld enthält, was wirklich zwei getrennte Felder gespeichert werden soll. So wird die Säule so etwas wie „der erste String ~ @ ~ Die zweite Zeichenfolge“ gespeichert, wobei „~ @ ~“ ist das Trennzeichen. (Noch einmal, ich habe das nicht entwerfen, ich versuche nur, es zu beheben.)

Ich möchte eine Abfrage diese in zwei Spalten zu verschieben, dass so etwas wie folgt aussehen:

UPDATE UserAttributes
SET str1 = SUBSTRING(Data, 1, STRPOS(Data, '~@~')),
    str2 = SUBSTRING(Data, STRPOS(Data, '~@~')+3, LEN(Data)-(STRPOS(Data, '~@~')+3))

Aber ich kann nicht feststellen, dass jeder gleich strpos vorhanden ist.

War es hilfreich?

Lösung

User charindex:

Select CHARINDEX ('S','MICROSOFT SQL SERVER 2000')
Result: 6

Link-

Andere Tipps

Die PATINDEX Funktion sollten Sie die Lage des Musters als Teil einer Zeichenfolge.

PATINDEX ( '%pattern%' , expression )

http://msdn.microsoft.com/en-us/library/ ms188395.aspx

Wenn Sie Ihre Daten in den Spalten hier brauchen, ist, was ich benutze:

  create FUNCTION [dbo].[fncTableFromCommaString] (@strList varchar(8000))  
RETURNS @retTable Table (intValue int) AS  
BEGIN 

    DECLARE @intPos tinyint

    WHILE CHARINDEX(',',@strList) > 0
    BEGIN   
        SET @intPos=CHARINDEX(',',@strList) 
        INSERT INTO @retTable (intValue) values (CONVERT(int, LEFT(@strList,@intPos-1)))
        SET @strList = RIGHT(@strList, LEN(@strList)-@intPos)
    END
    IF LEN(@strList)>0 
        INSERT INTO @retTable (intValue) values (CONVERT(int, @strList))

    RETURN

END

Just ersetzen '' in der Funktion mit dem Trennzeichen (oder vielleicht sogar parametrisieren it)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top