Domanda

ho a che fare con un database fastidiosa in cui un campo contiene ciò che realmente dovrebbe essere memorizzati due campi separati. Così la colonna viene memorizzato qualcosa come "La prima stringa ~ ~ @ La seconda stringa", dove "~ ~ @" è il delimitatore. (Anche in questo caso, non ho progettare questo, sto solo cercando di risolvere il problema.)

Voglio una query per spostare questo in due colonne, che sarebbe simile a questa:

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

Ma io non riesco a trovare che qualsiasi equivalente a strpos esiste.

È stato utile?

Soluzione

charindex utente:

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

link

Altri suggerimenti

La funzione PATINDEX dovrebbe darvi la posizione del modello come parte di una stringa.

PATINDEX ( '%pattern%' , expression )

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

Se avete bisogno dei vostri dati nelle colonne qui è quello che io uso:

  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

Basta sostituire '' nella funzione con il delimitatore (o forse anche parametrizzare esso)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top